微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

SQL 按日期和可选组排序

如何解决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 举报,一经查实,本站将立刻删除。