gpt4 book ai didi

MySQL 按组对表进行排序

转载 作者:行者123 更新时间:2023-11-29 14:11:57 24 4
gpt4 key购买 nike

我有一个表,其中包含字段 idgroupleftlevelcreatedAt

每一行都属于一个level = 0 的行是组“领导者”。

我想按领导者的日期对表格进行排序,并在每个组中按对行进行排序。例如,在此表中:

Id - Group - Left - Level - CreatedAt
1 1 1 0 00:10
2 1 2 1 00:20
3 2 1 0 00:00
4 1 3 1 00:30
5 2 2 1 00:40

顺序应该是:

Id - Group - Left - Level - CreatedAt
3 2 1 0 00:00
5 2 2 1 00:40
1 1 1 0 00:10
2 1 2 1 00:20
4 1 3 1 00:30

因为第 3 行是最新的组领导者,所以它应该位于第一个,后面是按 left 排序的所有组。之后是第 1 行,它是第二个新的领导者,后面是按排序的组。等等..

我希望我解释得足够清楚。

谢谢!

最佳答案

本质上,您需要将您的表与领导者的时间一起加入:

SELECT my_table.*
FROM my_table NATURAL JOIN (
SELECT my_table.Group, MIN(my_table.CreatedAt) AS LeaderTime
FROM my_table
WHERE my_table.Level = 0
GROUP BY my_table.Group
) t
ORDER BY t.LeaderTime, my_table.Left

查看 sqlfiddle .

如果你能够保证每个群体都有一个明确的领导者——例如因为您已经在 (Group, Level) 上定义了 UNIQUE 约束,但您不能拥有该约束,因为您的示例在 Group = 1 中包含两条记录Level = 1——那么你可以避免分组操作:

SELECT   my_table.*
FROM my_table JOIN my_table AS leader
ON leader.Group = my_table.Group AND leader.Level = 0
ORDER BY leader.CreatedAt, my_table.Left

关于MySQL 按组对表进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13365675/

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