我有这个表结构
+------+-------+--------------------------------------+
| parent_id | child_id | sdate
+------+-------+--------------------------------------+
| 59 | 1 | 2018-01-01
| 59 | 2 | 2019-01-01
| 60 | 5 | 2016-01-01
| ... | ... | ...
+------+-------+--------------------------------------+
我需要获取的是parent_id,以及具有该parent_id最高日期的child_id。
如果我执行此查询:
select parent_id, child_id, max(sdate) from my_table group by parent_id;
我知道
| parent_id | child_id | max(sdate)
| 59 | 1 | 2019-01-01
| 60 | 5 | 2016-01-01
所以日期是好的,但是第一行的child_id应该是2。
答案 0 :(得分:3)
您应该使用具有最长日期的连接作为parent_id
select m.parent_id, m.child_id, m.date
from my_table m
inner join (
select parent_id, max(sdate) max_date
from my_table
group by parent_id
) t on t.max_date = m.date and t.parent_id = m.parent_id
您使用的分组方式不正确(分组方式中的列与select中未聚合的列不匹配),因此您将获得不可预测的结果