【问题标题】:Postgres order entries by id, self reference id and date, after every parent, list childsPostgres 按 id、自我参考 id 和日期排序条目,在每个父母之后,列出孩子
【发布时间】:2020-03-26 17:19:27
【问题描述】:

我有一个表 orders,其中包含以下字段 idupdated_atself_ref_id 以及其他不计算在内的字段。
self_ref_id是一个自引用两个订单,一个订单可以有多个孩子,一个孩子不会有其他孩子。
我正在尝试按updated_at desc 订购所有条目,但在每次父母订购后,我想要他的孩子,也按updated_at 订购,即使孩子updated_at 低于下一个父母updated_at

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

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

我可以做一些后处理来按我想要的方式对它们进行排序,但我很好奇我是否可以从查询中做到这一点。

【问题讨论】:

    标签: sql postgresql sql-order-by self-referencing-table


    【解决方案1】:

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

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

    【讨论】:

    • 非常感谢
    猜你喜欢
    • 2012-11-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-12
    • 2012-09-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多