[英]SQL: Check if n consecutive records are greater than some value
我有一個包含數字的表。 我必須找出是否存在連續n個大於某個閾值m的情況。 例如
id delta
---------------
1 10
4 15
11 22
23 23
46 21
57 9
所以在這里,如果我想知道是否有3個連續記錄的值大於20,那么我應該得到True。 當我檢查4個連續記錄時為False。 那可能嗎? 這是在Apache Spark SQL上。 謝謝。
您可以使用lag來做到這一點:
select t.*
from (select t.*,
lag(val, 1) over (order by id) as val_1,
lag(val, 2) over (order by id) as val_2
from t
) t
where val > 20 and val_1 > 20 and val_2 > 20;
這將返回第一行,它是每個三人行的一部分。 如果您只想對/錯:
select (case when count(*) > 0 then 'true' else 'false' end)
from (select t.*,
lag(val, 1) over (order by id) as val_1,
lag(val, 2) over (order by id) as val_2
from t
) t
where val > 20 and val_1 > 20 and val_2 > 20;
編輯:
我錯過了不要超過3的部分。因此,您可以增強這一點:
select (case when count(*) > 0 then 'true' else 'false' end)
from (select t.*,
lag(val, 1) over (order by id) as val_1,
lag(val, 2) over (order by id) as val_2,
lag(val, 3) over (order by id) as val_3,
lead(val, 1) over (order by id) as val_next_1
from t
) t
where (val_3 <= 20 or val_3 is null) and
(val_2 > 20 and val_1 > 20 and val > 20) and
(val_next_1 <= 20 or val_next_1 is null);
這有點棘手,因為值可以在行的開頭或結尾。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.