【问题标题】:SQL Query - order by date but also groupSQL 查询 - 按日期排序,但也分组
【发布时间】:2011-12-27 19:40:13
【问题描述】:

好的女士们,先生们,我非常感谢一些帮助:

这是我的桌子:

ID postID replyID content entry_date 1 0 40 嘿 12/7 2 0 40 喜 12/8 3 0 40 怎么样 12/9 4 2 40 为什么? 12/10 5 0 40 谁? 12/11

我需要像这样运行查询:

ID postID replyID content entry_date 1 0 40 嘿 12/7 2 0 40 喜 12/8 4 2 40 为什么? 12/10 3 0 40 怎么样 12/9 5 0 40 谁? 12/11

您会看到 ID 3 和 4 已切换。所以基本上我需要按 entry_date 进行 ASC,除非 ID = POSTID,然后我需要将这两个分组在一起,并且还需要按 entry_date 对这两个进行 ASC。

这是我尝试过的,但我完全迷失了:

SELECT t1.ID, t1.postID, t1.replyID, t1.content, t1.entry_date
  FROM discussion t1, discussion t2
 WHERE t1.replyID = '40' AND t1.ID = t2.postID
 ORDER BY t1.entry_date ASC

这基本上什么都不做,只是找到一行 ID = 一行 postID

【问题讨论】:

  • 由于您的数据都没有ID == PostID,因此您对需求的解释令人困惑。
  • 是的。您能否重新阅读并编辑您的问题?

标签: mysql sql group-by sql-order-by


【解决方案1】:

您可以在ORDER BY 子句中添加CASE 语句

ORDER BY 
  CASE WHEN postID = 0 THEN ID ELSE postID END
  , entry_date

这样做,您可以一起丢弃连接,整个语句可以简化为

SELECT  ID
        , postID
        , replyID
        , content
        , entry_date
FROM    discussion
ORDER BY 
       CASE WHEN postID = 0 THEN ID ELSE postID END
       , entry_date

请注意,我假设输入日期是 DATETIME 列,而不是 VARCHAR 列。

【讨论】:

    猜你喜欢
    • 2020-07-26
    • 2021-08-13
    • 1970-01-01
    • 2011-02-19
    • 2011-03-08
    • 2010-09-28
    • 2015-05-11
    • 1970-01-01
    • 2013-12-08
    相关资源
    最近更新 更多