如何选择带有最新时间戳的记录

时间:2018-04-02 19:43:04

标签: php mysql datetime

我无法弄明白这一点。我有一张表如下:

routeLogTbl

id          pro     trailer     arrival_date    arrival_time
-------     ------- ---------   ------------    ------------
1           55      691995      2018-04-04      23:50:00    
2           59      691995      2018-03-15      23:22:00    
3           47      691995      2018-04-02      23:23:00    
4           66      691995      2018-04-05      07:00:00    
5           577     691995      2018-04-02      23:50:00

我想要的是通过汇总日期和时间来获得最新记录。我知道我必须使用max但它很奇怪。如果我运行以下查询,我会得到最大日期,但我没有得到与MAX匹配的预期记录ID。

SELECT
   routeLogTbl.pro,
   MAX( TIMESTAMP( routeLogTbl.arrival_date, routeLogTbl.arrival_time ) ) AS DelTimeDate 
FROM
   routeLogTbl 
WHERE
   routeLogTbl.trailer = 691995 
GROUP BY
   routeLogTbl.trailer

4 个答案:

答案 0 :(得分:1)

使用子查询获取日期/时间的极值,然后使用连接条件检索详细记录,是执行此操作的标准方法。 (http://sqlfiddle.com/#!9/4d588b/1/0

SELECT detail.*
  FROM tbl detail
  JOIN ( 
         SELECT MAX(TIMESTAMP( arrival_date, arrival_time)) arrival_datetime,
                trailer
           FROM tbl
          GROUP BY trailer
       ) m   ON detail.trailer=m.trailer
            AND TIMESTAMP( arrival_date, arrival_time) = arrival_datetime

这会在结果集中为trailer的每个不同值提供一行。

答案 1 :(得分:0)

一种选择是排序并且只获得一个:

SELECT
   routeLogTbl.pro,
   TIMESTAMP(routeLogTbl.arrival_date, routeLogTbl.arrival_time) AS DelTimeDate
FROM
   routeLogTbl 
WHERE
   routeLogTbl.trailer = 691995 
ORDER BY
   routeLogTbl.arrival_date DESC,
   routeLogTbl.arrival_time DESC 
LIMIT 1

答案 2 :(得分:0)

以下是我将如何使用子查询来获取最大时间戳:

SELECT  route.pro,
        TIMESTAMP(route.arrival_date, route.arrival_time) DelTimeDate 
FROM    routeLogTbl route
WHERE   trailer = 691995
AND     TIMESTAMP(arrival_date, arrival_time) = (
    SELECT MAX(TIMESTAMP(effdt.arrival_date, effdt.arrival_time)) FROM routeLogTbl effdt WHERE effdt.trailer = route.trailer
)

答案 3 :(得分:0)

为您创建了一个SQLFiddle:http://sqlfiddle.com/#!9/5b8817f/9/0

查询:

SELECT *
FROM routeLogTbl
WHERE TIMESTAMP(arrival_date, arrival_time) = 
(SELECT MAX(TIMESTAMP(arrival_date, arrival_time)) FROM routeLogTbl);

没有JOIN s。

结果:

id  pro     trailer     arrival_date    arrival_time
4   66  691995  2018-04-05  07:00:00