我正在尝试创建一个查询,该查询将整个消息线程按升序排序,并且所有消息线程也按升序排序,因此看起来像这样
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排序所有消息
我应该如何处理?我是否应该首先获取每个消息线程的rootnode,并使用这些rootnode的thread_ids执行查询,然后获取整个消息线程? (例如在非SQL语言中使用for循环)
答案 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
的事实。