我有一张看起来像这样的表。
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
答案 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