我有一张 table ,我想得到:
ID Name Stock Code Date
<---------------------------------------------->
123 GAME_0011 1 WK1 2018-11-20 16:12:16
120 GAME_0088 212 WK1 2018-11-20 19:32:13
109 GAME_0088 21 WK1 2018-11-20 19:32:13
101 GAME_0088 20 WK1 2018-11-20 14:00:41
105 GAME_0011 1 WK1 2018-11-20 14:00:41
102 GAME_0088 2 WK1 2018-11-20 14:00:41
结果将按名称、代码和每个 date
字段的 MAX 计算,如果日期相同,也按 id
过滤:
ID Name Stock Code Date
<---------------------------------------------->
120 GAME_0088 212 WK1 2018-11-20 19:32:13
123 GAME_0011 1 WK1 2018-11-20 16:12:16
我的查询是:
SELECT *
FROM games
WHERE name IN ('GAME_0088', 'GAME_0011')
AND code IN ('WK1')
AND date IN (SELECT max(date) FROM stocks GROUP BY name)
ORDER BY id desc
但返回:
ID Name Stock Code Date
<---------------------------------------------->
123 GAME_0011 1 WK1 2018-11-20 16:12:16
109 GAME_0088 21 WK1 2018-11-20 19:32:13
怎么了?我如何也可以按 MAX ID 进行过滤?
最佳答案
在 Derived 表中,您可以获得特定组 name
和 code
的 ID
的最大值。使用此信息返回 games
表以获取与最大日期对应的行。
SELECT g.*
FROM games AS g
JOIN
( SELECT name, code, MAX(ID) AS max_id
FROM games
GROUP BY name, code
) AS dt ON dt.name = g.name AND
dt.code = g.code AND
dt.max_id = g.ID
WHERE g.name IN ('ACK1134', 'ACK1159')
AND g.code IN ('CD23')
ORDER BY g.ID desc
关于MySQL 查询 - 按日期和 ID 过滤,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53411747/