gpt4 book ai didi

mysql - 在MySQL中选择某个值下的连续行

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

选择列低于特定值的连续行

我有一个包含以下数据的表:

crashID     crash
-----------------------
1 189
2 144
3 8939
4 748
5 988
6 102
7 392
8 482
9 185
10 101

我想选择崩溃值低于特定阈值的最长连续行。对于此示例,假设为 500。

如何在单个 MySQL 查询中执行此操作? (v8.0.1)

期望的输出是这样的:

crashID     crash
------------------
6 102
7 392
8 482
9 185
10 101

最佳答案

您可以尝试使用间隙和孤岛方法来解决它,假设每次崩溃 lte 500 都是一个孤岛,然后找到最大的孤岛:

SET @threshold = 500;
WITH cte1 AS (
SELECT
crashID,
CASE WHEN crash <= @threshold THEN 1 ELSE 0 END AS island,
ROW_NUMBER() OVER (ORDER BY crashID) rn1,
ROW_NUMBER() OVER (PARTITION BY CASE WHEN crash <= @threshold THEN 1 ELSE 0 END ORDER BY crashID) rn2
FROM t
), cte2 AS (
SELECT MIN(crashID) AS fid, MAX(crashID) AS tid
FROM cte1
WHERE island = 1
GROUP BY rn1 - rn2
ORDER BY COUNT(*) DESC
LIMIT 1
)
SELECT *
FROM t
WHERE crashID BETWEEN (SELECT fid FROM cte2) AND (SELECT tid FROM cte2);

DB Fiddle

关于mysql - 在MySQL中选择某个值下的连续行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53188100/

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