按时间按时间和值排序的表,我想添加一个名为Keep的列,表示要保留的行。每行的保留列为0或1。
保持一排的标准:
如果每行和上一行之间的时间大于5分钟,请保留此行;如果当前行的值与上一行的值不同,请保留此行。 (保持= 1)
如果上一行和该行之间的时间小于5分钟且值相同,则将其标记为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 |
+--------+-------+------+
答案 0 :(得分:0)
一种方法使用相关子查询:
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;