我无法弄明白这一点。我有一张表如下:
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
答案 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