Postgres 按 ID、自引用 ID 和日期排序条目,在每个 parent 之后,列出子项

Postgres order entries by id, self reference id and date, after every parent, list childs

我有 table orders,其中包含以下字段 idupdated_atself_ref_id 和其他不算数的字段。
self_ref_id是自引用两个订单,一个订单可以有多个children,一个child不会有其他children.
我正在尝试按 updated_at desc 订购所有条目,但在每次 parent 订购后,我想要他的 children,也按 updated_at 订购,即使 [=34] =]updated_at低于下一个parentupdated_at

我试着按 updated_at 排序,然后按 idself_ref_id 分组。

我正在使用 go 和 gorm,如果它重要的话,但我需要提示如何进行此查询。 我也在尝试使用子查询,但没有成功。 我不需要重复字段,我只想对它们进行排序。

我可以做一些 post-processing 来按照我想要的方式对它们进行排序,但我很好奇我是否可以通过查询来做到这一点。

您可以使用自联接来执行此操作:

select o.*
from orders o
left join orders p on p.id = o.self_ref_id
order by 
    coalesce(p.updated_at, o.updated_at), 
    p.id is not null,
    o.updated_at

left join 显示父行(如果有)。然后,我们按父日期排序(如果没有父日期,则按当前日期排序);第二个排序标准 (p.id is not null) 优先考虑 "parent" 行,最后一个标准按日期对子行排序。