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按日期和可选组排序[关闭]的主要内容,如果未能解决你的问题,请参考以下文章

SQL多表联合查询按日期排序

SQL 按日期排序并按用户获取结果

在Python中按日期对excel文件进​​行排序[关闭]

sql中如何把具体日期转化为按月排序?

如何在 SQL 中按多列分组并按日期排序?

Magnolia JCR-SQL2 按日期排序