gpt4 book ai didi

sql - 如何按日期排序但按特定列值 SQL 分组

转载 作者:行者123 更新时间:2023-12-03 17:03:40 25 4
gpt4 key购买 nike

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

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,date 是该对话的帖子日期。因此,当在列表中显示时,最新帖子的对话应该位于顶部。

跟进问题如果 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

最佳答案

尝试以下操作:

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

关于sql - 如何按日期排序但按特定列值 SQL 分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15958066/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com