timestampdiff returning correct but negative minutes

2k Views Asked by At

It's a simple query to retrieve for users, how many minutes, or hours or days they were last online. The calculations for hours and days are correct. However for minutes, the following is returning correct value but negative e.g. -4 minutes, -6 minutes, -10 minutes when should be positive.

select username, 
    (CASE 
        when TIMESTAMPDIFF(HOUR, lastlogin, '2016-05-03 16:39:01')<1 
           then concat(TIMESTAMPDIFF(MINUTE, '2016-05-03 16:39:01', lastlogin), ' mins')
        when TIMESTAMPDIFF(DAY, lastlogin, '2016-05-03 16:39:01')<=2 
           then concat(TIMESTAMPDIFF(HOUR, lastlogin, '2016-05-03 16:39:01'), ' hrs')
        else concat(TIMESTAMPDIFF(DAY, lastlogin, '2016-05-03 16:39:01'), ' days') 
        END) as difference 
    from member where lastlogin<'2016-05-03 16:37:01' order by lastlogin desc limit 15;

This is the piece of code generating this error, how to get it to return positive values?

concat(TIMESTAMPDIFF(MINUTE, '2016-05-03 16:39:01', lastlogin), ' mins')
1

There are 1 best solutions below

1
Clint On

For every TIMESTAMPDIFF you use (*, lastlogin, "date string") But for minutes you use

TIMESTAMPDIFF(MINUTE, '2016-05-03 16:39:01', lastlogin)

try

TIMESTAMPDIFF(MINUTE, lastlogin, '2016-05-03 16:39:01')

Or you could multiply the value by -1 as well.