基于前面的行生成列值

oknwwptz  于 2021-06-21  发布在  Mysql
关注(0)|答案(1)|浏览(286)

一个按时间和值排序的表,我想添加一个名为keep的列,它表示要保留哪一行。每行的keep列为0或1。
保留行的条件:
如果每行与前一行之间的时间大于5分钟,则保留该行;如果当前行的值与前一行不同,请保留此行(保持=1)
如果上一行和此行之间的时间小于5分钟,并且值相同,则在keep列中将其标记为0。下一行将不使用当前行来计算时差,而是使用上一行。
输出示例:

+--------+-------+------+
|  Time  | Value | Keep |
+--------+-------+------+
| 11:34  |   150 |    1 |
| 11:35  |   150 |    0 |
| 11:40  |   150 |    1 |
| 11:40  |   151 |    1 |
| 11:41  |   151 |    0 |
| 11:43  |   152 |    1 |
| 11:44  |   152 |    0 |
| 11:50  |   152 |    1 |
+--------+-------+------+
iyr7buue

iyr7buue1#

一种方法使用相关子查询:

select t.*,
       (exists (select 1
                from t t2
                where t2.time < t.time and t2.time >= t.time - interval 5 minute and
                      t2.value = t.value
       ) as keep
from t;

相关问题