我的表orders
包含以下字段id
,updated_at
,self_ref_id
和其他不计在内的字段。self_ref_id
列是一个自引用两个订单,一个订单可以有多个孩子,一个孩子将没有其他孩子。我试图按updated_at desc
对所有条目进行排序,但是在每个父项排序之后,我都想让他的孩子也按updated_at
进行排序,即使子项updated_at
低于下一个父项updated_at
。
我尝试按updated_at
对其进行排序,并按id
和self_ref_id
对它们进行分组。
我正在使用gorm和gorm,如果需要的话,但是我需要提示如何进行此查询。我也在尝试子查询,但是没有成功。我不需要重复的字段,我只想订购它们。
我可以进行一些后期处理以对它们进行排序,但是我很好奇是否可以从查询中进行排序。
您可以通过自我加入来做到这一点:
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
)赋予“父”行优先级,最后一个条件按日期对子行进行排序。