gpt4 book ai didi

MySQL 按列值分组 block ,按其他列排序

转载 作者:可可西里 更新时间:2023-11-01 08:33:02 25 4
gpt4 key购买 nike

我有一个像这样的表:

time       | status1390836600 | 11390836605 | 11390836610 | 01390836615 | 01390836620 | 11390836625 | 11390836630 | 1

我需要输出按状态“分组”的数据,并按时间排序。诀窍是每次状态更改时我都需要分组,字段为:MIN(time), status

所以对于上面的示例数据,我需要这样的输出

MIN(time)  | status1390836600 | 11390836610 | 01390836620 | 1

这不是 GROUP BY 的行为,它只会将具有相同状态的所有行分组,并且只输出 2 行。但是这样的事情可能吗?

最佳答案

这个(连续范围的分组)被称为gaps-and-islands 问题,可以通过使用 MySQL 仍然使用的分析函数(特别是 ROW_NUMBER())有效地解决不支持。

但是您可以通过以下方式使用 session 变量模拟 ROW_NUMBER()

SELECT MIN(time) time, status
FROM
(
SELECT time, status,
@n := @n + 1 rnum,
@g := IF(status = @s, @g + 1, 1) rnum2,
@s := status
FROM table1 CROSS JOIN (SELECT @n := 0, @g := 0, @s := NULL) i
ORDER BY time
) q
GROUP BY rnum - rnum2

输出:

|       TIME | STATUS ||------------|--------|| 1390836600 |      1 || 1390836610 |      0 || 1390836620 |      1 |

这是一个 SQLFiddle 演示

关于MySQL 按列值分组 block ,按其他列排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21384017/

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