从日期最高的行中选择ID返回错误的child_id

时间:2019-01-25 17:39:07

标签: mysql

我有这个表结构

    +------+-------+--------------------------------------+
    | 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。

1 个答案:

答案 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中未聚合的列不匹配),因此您将获得不可预测的结果