3

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

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
4

1 回答 1

4

尝试以下操作:

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
于 2013-04-11T20:23:52.137 回答