我在发布前整天都进行了尝试和搜索,但无法弄清楚如何解决问题。
我有一张基本上像这样的桌子
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)。
答案 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