我有一个包含id、group、左侧、level和createdAt字段的表。
每一行都属于一个组。级别=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因为第三排是最新的领队,所以应该排在第一位,然后是所有由左排的小组。之后是第一排,这是第二位最新的领导,其次是按左排列的小组。等等。
我希望我解释得够清楚了。
谢谢!
发布于 2012-11-13 17:31:58
本质上,你需要在领导的时间里加入你的桌子:
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中的两个记录,您可以避免分组操作:
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发布于 2012-11-13 17:48:11
为了对组长的createdAt进行排序,可以将每一行加入到描述组组长的行中,然后执行排序:
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;https://stackoverflow.com/questions/13365675
复制相似问题