首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MySQL按组排序表

问MySQL按组排序表
EN

Stack Overflow用户
提问于 2012-11-13 17:30:37
回答 2查看 88关注 0票数 0

我有一个包含id、group、左侧、level和createdAt字段的表。

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

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

代码语言:javascript
复制
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

命令应是:

代码语言:javascript
复制
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

因为第三排是最新的领队,所以应该排在第一位,然后是所有由左排的小组。之后是第一排,这是第二位最新的领导,其次是按左排列的小组。等等。

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

谢谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-11-13 17:31:58

本质上,你需要在领导的时间里加入你的桌子:

代码语言:javascript
复制
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

请在木琴上看到。

如果您可以保证每个组都有一个明确的领导者--例如,因为您在(Group, Level)上定义了一个(Group, Level)约束,您就不能拥有这个约束,因为您的示例包含了Group = 1和Level = 1-then中的两个记录,您可以避免分组操作:

代码语言:javascript
复制
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
票数 1
EN

Stack Overflow用户

发布于 2012-11-13 17:48:11

为了对组长的createdAt进行排序,可以将每一行加入到描述组组长的行中,然后执行排序:

代码语言:javascript
复制
SELECT t1.*
FROM my_table t1
INNER JOIN  my_table t2
ON t1.Group = t2.Group AND t2.Level = 0
ORDER BY t2.CreatedAt, t1.Left;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13365675

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档