2013-06-25 41 views
0

我想获得具有指定“拉”值的最新记录,然后按imei编号分组。但我得到错误的输出,时间不符合我在我的数据库中有没有获取最新的行,像

这是我的tabel。

IMEI    TIME      STATUS 
    354851057191551 2013-06-25 10:11:30  pull getrestbyimei 
    354851057191551 2013-06-25 10:10:36  Push getrestbyimei 
    354851057234971 2013-06-25 10:10:34  Push getbookings 
    351895053436612 2013-06-25 10:10:32  pull getrestbyimei 
    351895053436612 2013-06-25 10:10:31  pull getrestbyimei 

所需的输出:

 IMEI    TIME      STATUS 
     354851057191551 2013-06-25 10:11:30  pull getrestbyimei 
     351895053436612 2013-06-25 10:10:32  pull getrestbyimei 

这是我尝试:

SELECT imei as IMEI, MAX(FROM_UNIXTIME(timestamp)) as TIME, action as STATUS 
    FROM testlog 
    where action like 'pull%' 
    GROUP BY imei 
order by TIME asc 

回答

1

你需要做的order by TIME desc检索最新记录

+0

不过,这只是一行? – Zaz

+0

你说'得到最新的记录在哪里就像' – DevZer0

+0

原子笔,对不起,我的意思是多行,不仅一个 – Zaz

0

您可以通过用户的ORDER BY PRIMARY_KEY DESC

这里PRIMARY_KEY是你的主键字段

1

我觉得你不需要FROM_UNIXTIME函数。

SELECT imei as IMEI, MAX(timestamp) as TIME, action as STATUS 
    FROM testlog 
    where action like 'pull%' 
    GROUP BY imei 
order by TIME asc 

这里是SQL Fiddle Demo

1

您需要一个子选取器才能获取每种类型的最新记录时间戳,然后将其连接到表中以获取剩余的行列。否则,你得到的动作可能会或可能不是最新动作(如果你有多个不同的动作,但以拉动开始)。

SELECT a.imei, a.timestamp, a.action 
FROM testlog a 
INNER JOIN 
(
    SELECT imei as IMEI, MAX(timestamp) as MaxTime 
    FROM testlog 
    where action like 'pull%' 
    GROUP BY imei 
) b 
ON a.imei = b.imei 
AND a.timestamp = b.MaxTime 

的另一个问题是,你戳是一个时间戳,而不是一个UNIX时间戳。所以你不应该从unix时间戳中转换它。

0

试试这个

SELECT imei as IMEI, MAX(timestamp) as TIME, action as STATUS 
    FROM testlog 
    where action like 'pull%' 
    GROUP BY imei 
    order by TIME asc