查询以检索消息线程

时间:2019-12-02 01:40:43

标签: sql postgresql

我正在尝试创建一个查询,该查询将整个消息线程按升序排序,并且所有消息线程也按升序排序,因此看起来像这样

posted 5 days ago  
    posted 2 days ago
    posted 1 hour ago

posted 9 days ago
    posted 4 hours ago
    posted 2 hours ago

posted 20 days ago
    posted 7 days ago

我已经尝试了一段时间,但仍然无法获得预期的输出。

我在每个消息线程中都有按desc排序的消息,但是我不知道如何按desc排序所有消息

enter image description here

我应该如何处理?我是否应该首先获取每个消息线程的rootnode,并使用这些rootnode的thread_ids执行查询,然后获取整个消息线程? (例如在非SQL语言中使用for循环)

1 个答案:

答案 0 :(得分:1)

使用窗口函数获取线程中第一条帖子的日期。然后您就可以订购了。

SELECT *
FROM (SELECT *,
             first_value(date_posted)
                OVER (PARTITION BY thread_id
                      ORDER BY is_root IS NOT TRUE) AS leader_date 
      FROM event_comments) AS comments_with_leaderdate
ORDER BY leader_date DESC, date_posted DESC;

这利用了FALSE < TRUE的事实。