Wox*_*Wox 3 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
Run Code Online (Sandbox Code Playgroud)
我想要一个给出这个结果的 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
Run Code Online (Sandbox Code Playgroud)
所以我希望所有具有相同 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
Run Code Online (Sandbox Code Playgroud)
那么上面的表格就变成这样了
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
Run Code Online (Sandbox Code Playgroud)
请尝试以下操作:
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
Run Code Online (Sandbox Code Playgroud)
更新
不确定这是否是您想要的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
Run Code Online (Sandbox Code Playgroud)