我有这样的表格:
id name start_date
1 abc 2019-12-27
1 asd 2019-12-27
1 dwq 2019-12-27
1 sre 2019-12-27
1 ers 2019-12-27
1 fas 2019-12-23
1 abc 2019-12-23
1 dwq 2019-12-23
2 wda 2019-12-23
2 wqw 2019-12-23
2 rew 2019-12-19
2 sdf 2019-12-19
2 vfd 2019-12-19
2 asd 2019-12-19
我想以某种方式过滤它,我得到所有 ID 为 1 和最高日期的记录。当我这样做时:
SELECT id,MAX(start_date),name FROM table1 WHERE id=1 GROUP BY name;
我得到了这个结果:
1 abc 2019-12-27
1 asd 2019-12-27
1 dwq 2019-12-27
1 sre 2019-12-27
1 ers 2019-12-27
1 fas 2019-12-23
还有一行名称为"fas",我猜显示它是因为该名称对于 2019-12-23 日期是唯一的。如何正确过滤?
编辑:我在两列中有重复项 - ID和start_date。对于单个 ID,可以有多个日期,当然一个日期可以有多个 ID。但是我想得到的是具有特定ID和最高可能start_date的字段。
SELECT [DISTINCT] *
FROM table1
WHERE id = 1
AND start_date = ( SELECT MAX(start_date)
FROM table1
WHERE id = 1 )
使用NOT EXISTS
:
SELECT t.* FROM table1 t
WHERE t.id = 1
AND NOT EXISTS (
SELECT 1 FROM table1
WHERE id = t.id AND start_date > t.start_date
)
请参阅演示。
结果:
| id | name | start_date |
| --- | ---- | ------------------- |
| 1 | abc | 2019-12-27 00:00:00 |
| 1 | asd | 2019-12-27 00:00:00 |
| 1 | dwq | 2019-12-27 00:00:00 |
| 1 | sre | 2019-12-27 00:00:00 |
| 1 | ers | 2019-12-27 00:00:00 |