Postgres 按 ID、自引用 ID 和日期排序条目,在每个 parent 之后,列出子项
Postgres order entries by id, self reference id and date, after every parent, list childs
我有 table orders
,其中包含以下字段 id
、updated_at
、self_ref_id
和其他不算数的字段。
列self_ref_id
是自引用两个订单,一个订单可以有多个children,一个child不会有其他children.
我正在尝试按 updated_at desc
订购所有条目,但在每次 parent 订购后,我想要他的 children,也按 updated_at
订购,即使 [=34] =]updated_at
低于下一个parentupdated_at
。
我试着按 updated_at
排序,然后按 id
和 self_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" 行,最后一个标准按日期对子行排序。
我有 table orders
,其中包含以下字段 id
、updated_at
、self_ref_id
和其他不算数的字段。
列self_ref_id
是自引用两个订单,一个订单可以有多个children,一个child不会有其他children.
我正在尝试按 updated_at desc
订购所有条目,但在每次 parent 订购后,我想要他的 children,也按 updated_at
订购,即使 [=34] =]updated_at
低于下一个parentupdated_at
。
我试着按 updated_at
排序,然后按 id
和 self_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" 行,最后一个标准按日期对子行排序。