簡體   English   中英

SQL:檢查n個連續記錄是否大於某個值

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM