如何解决SQL 按日期和可选组排序
是否可以按日期排序,但在一组中维护组(如果给定)?
示例数据集:
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
解决方法
这有点棘手,因为您将 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))
),date desc
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。