MySQL INNER JOIN仅选择最近创建的第一行

时间:2019-11-04 16:41:22

标签: mysql subquery inner-join

我在发布前整天都进行了尝试和搜索,但无法弄清楚如何解决问题。

我有一张基本上像这样的桌子

ID | Name | RelatedTo | CreatedAt | Revision

基本上,它跟踪文档名称及其内容,以及修订的版本是(0,1,2,3,...),以及它是否与“父亲”文档有关(可选)。

文档可以有修订版

ID | Name | RelatedTo | CreatedAt | Revision
1  | A    |           | 2019-11-01| 0
2  | B    |           | 2019-11-01| 0
3  |      | 2         | 2019-11-04| 1

我从这个post开始,但是我无法使其适用于我的情况。

我需要选择主记录(例如A和B)和最后一个CreatedAt字段(A为2019-11-01,B为2019-11-04)。

2 个答案:

答案 0 :(得分:0)

您可以按名称对最大日期组使用子查询

select m.* 
from  my_table m
inner join  (
  select  name, max(reatedAt) max_date
  from   (
    select  name, createdAt
    from my_table 
    union 
    select m1.name, m2.createdAt
    from my_table m1 
   inner join  my_table m2 ON m1.id = me.RelatedTo
  ) t
  group by name
)  t ON t.name  = m.name 
      and t.max_date  = m.CreatedAt

答案 1 :(得分:0)

这是您需要的:

select a.RelatedTo
       , max(a.name)
       ,  max(a.m) 
from (select RelatedTo
             , name
             , max(CreatedAt) m 
      from my_table 
      where RelatedTo is not null
      group by RelatedTo
               , name
      union all
      select id
             , name
             , max(CreatedAt) m 
      from my_table 
      where RelatedTo is null
      group by ID
            , name ) a
group by a.RelatedTo
order by a.RelatedTo

这里是DEMO