SQL按日期和可选组排序[关闭]
Posted
技术标签:
【中文标题】SQL按日期和可选组排序[关闭]【英文标题】:SQL Sort by date and optional group [closed] 【发布时间】:2021-09-07 04:11:17 【问题描述】:是否可以按日期排序,但在一组中维护组(如果给定)?
示例数据集:
id | date | group
————————————————————————————
7 | 2021-04-10 |
6 | 2021-04-02 | GGGG
5 | 2021-04-01 |
4 | 2021-04-01 | GGGG
3 | 2021-03-31 | GGGG
2 | 2021-03-30 |
1 | 2021-03-28 | XYZ
预期输出:
id | date | group
————————————————————————————
7 | 2021-04-10 |
6 | 2021-04-02 | GGGG
4 | 2021-04-01 | GGGG
3 | 2021-03-31 | GGGG
5 | 2021-04-01 |
2 | 2021-03-30 |
1 | 2021-03-28 | XYZ
【问题讨论】:
您使用的是 mysql 8+ 吗?如果是这样,那么请在下面尝试 Gordon 的答案。 不幸的是,这个问题已经关闭,即使我是具体的并发布了示例 - 它已经得到了一个公认的答案。如果有人可以重新打开它会很棒。 【参考方案1】:这有点棘手,因为您将NULL
视为一个单独的组。所以,一种方法是:
order by max(date) over (partition by coalesce(group, -id)) desc,
group, date desc
Here 是一个 dbfiddle。
这是可行的,因为两列的值都是正值,因此使用负值不会干扰唯一分区的分配。
编辑:
在旧版本的 MySQL 中,一种可能性是相关子查询:
order by (select max(t2.date)
from t t2
where t2.group = t.group or
(t.group is null and t2.id = t.id))
),
group, date desc
【讨论】:
我尝试了你的建议(这次使用 MySQL 8.0),不幸的是我得到了与order by group desc, date desc
相同的输出 // 编辑:它可以选择它作为一个字段,然后按该字段排序
@Simon 。 . .我添加了一个 dbfiddle。它的工作原理与宣传的一样。
感谢您的提琴。不幸的是,它仅适用于选择字段(8.0.21)。因为我现在没有时间调试这个案例,这对我来说非常好。以上是关于SQL按日期和可选组排序[关闭]的主要内容,如果未能解决你的问题,请参考以下文章