Postgres订单条目的ID,自引用ID和日期,在每个父项之后列出子项

问题描述 投票:2回答:1

我的表orders包含以下字段idupdated_atself_ref_id和其他不计在内的字段。self_ref_id列是一个自引用两个订单,一个订单可以有多个孩子,一个孩子将没有其他孩子。我试图按updated_at desc对所有条目进行排序,但是在每个父项排序之后,我都想让他的孩子也按updated_at进行排序,即使子项updated_at低于下一个父项updated_at

我尝试按updated_at对其进行排序,并按idself_ref_id对它们进行分组。

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

我可以进行一些后期处理以对它们进行排序,但是我很好奇是否可以从查询中进行排序。

sql postgresql sql-order-by self-referencing-table
1个回答
0
投票

您可以通过自我加入来做到这一点:

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)赋予“父”行优先级,最后一个条件按日期对子行进行排序。

© www.soinside.com 2019 - 2024. All rights reserved.