【问题标题】:SQL ORDER BY with 2 timestamp columns带有 2 个时间戳列的 SQL ORDER BY
【发布时间】:2022-11-28 16:56:23
【问题描述】:

我正在尝试为我的一些程序员朋友建立一个博客类型的网站,我们可以在其中分享有关代码、Linux、软件等的技巧和文章。

我正在 PostgreSQL 中构建发布系统,到目前为止一切顺利。然而,让我感到困惑的是使用 ORDER BY 对两个 timestamptz 列进行排序。我希望能够有一个创建的时间戳,还有一个修改后的时间戳。这应该按最新帖子排序(最近创建或修改)。我想出了这个 - 帖子 135 应该在最上面,但修改后的帖子优先。

我希望修改和创建的字段都可用,这样我就可以显示:“创建于 xx-xx-xx,最后更新 yy-yy-yy”。

SELECT posts.postid, users.id, posts.modified, posts.created
FROM posts
JOIN users ON posts.userid=users.id
WHERE posts.isdraft=false
ORDER BY posts.modified DESC NULLS LAST, posts.created DESC;

 postid | id  |           modified            |            created
--------+-----+-------------------------------+-------------------------------
    100 | 999 | 2022-11-28 01:57:07.495482-06 | 2022-11-27 21:43:34.132985-06
    115 | 111 | 2022-11-28 01:55:05.9358-06   | 2022-11-27 21:43:34.137873-06
    135 | 999 |                               | 2022-11-28 02:28:20.64009-06
    130 | 444 |                               | 2022-11-28 01:42:49.301489-06
    110 |  42 |                               | 2022-11-27 21:43:34.137254-06

JOIN 的原因是我需要附加到用户 ID 的用户名,但我在这里省略了它以节省空间)

感谢所有帮助,谢谢!

【问题讨论】:

    标签: sql postgresql


    【解决方案1】:

    按两个时间戳中的greatest排序。这是您进行此修改后的查询。

    SELECT posts.postid, users.id, posts.modified, posts.created
    FROM posts
    JOIN users ON posts.userid=users.id
    WHERE not posts.isdraft
    ORDER BY greatest(posts.modified, posts.created) DESC;
    

    【讨论】:

    • 哇,这么快,非常感谢!一旦允许,我会接受你的回答:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-27
    • 2012-02-24
    • 2013-12-07
    • 1970-01-01
    • 2017-04-02
    相关资源
    最近更新 更多