如何按日期排序,但对某个列值SQL进行分组

时间:2013-04-11 20:15:48

标签: sql sqlite sorting sql-order-by

我有一张看起来像这样的表。

my_id |    date
-------------------  
  1   | 2013-04-01
  1   | 2013-04-02
  2   | 2013-04-03
  1   | 2013-04-04
  3   | 2013-04-05
  2   | 2013-04-06

我想要一个提供此结果的SQL查询。

my_id |    date
-------------------  
  2   | 2013-04-06
  2   | 2013-04-03
  3   | 2013-04-05
  1   | 2013-04-04
  1   | 2013-04-02
  1   | 2013-04-01

所以我希望所有使用相同my_id的人都与日期降序排列在一起。并且my_id的组应该根据组中的最新日期按日期降序排序。

这就像你可以说的线索对话,my_id是对话ID,日期是对话帖子的日期。因此,当在列表中显示时,与最新帖子的对话应该在最重要的位置。

跟进问题 如果my_id为NULL,则不应将它们组合在一起,但仍按日期排序。例如,如果他们不是对话的一部分,那就是这样。

my_id |    date
-------------------  
  1   | 2013-04-01
  1   | 2013-04-02
  2   | 2013-04-03
  1   | 2013-04-04
 NULL | 2013-04-05
  2   | 2013-04-06
 NULL | 2013-04-07

上面的表格就像这样

my_id |    date
-------------------  
 NUll | 2013-04-07
  2   | 2013-04-06
  2   | 2013-04-03
 NULL | 2013-04-05
  1   | 2013-04-04
  1   | 2013-04-02
  1   | 2013-04-01

1 个答案:

答案 0 :(得分:3)

尝试以下方法:

SELECT A.my_id, A.YourDate
FROM YourTable A
INNER JOIN (SELECT my_id, MAX(YourDate) MaxDate
            FROM YourTable
            GROUP BY my_id) B
    ON A.my_id = B.my_id
ORDER BY B.MaxDate DESC, A.YourDate DESC

<强>已更新

不确定这是否是您想要的NULL值,但无论如何:

SELECT A.my_id, A.YourDate
FROM YourTable A
LEFT JOIN ( SELECT my_id, MAX(YourDate) MaxDate
            FROM YourTable
            WHERE my_id IS NOT NULL
            GROUP BY my_id) B
    ON A.my_id = B.my_id
ORDER BY COALESCE(B.MaxDate,A.YourDate) DESC, A.YourDate DESC