根据以前的行生成列值

时间:2018-05-18 07:44:51

标签: mysql sql

按时间按时间和值排序的表,我想添加一个名为Keep的列,表示要保留的行。每行的保留列为0或1。

保持一排的标准:

  1. 如果每行和上一行之间的时间大于5分钟,请保留此行;如果当前行的值与上一行的值不同,请保留此行。 (保持= 1)

  2. 如果上一行和该行之间的时间小于5分钟且值相同,则将其标记为0以保留列。下一行不会使用当前行来计算时差,它会使用前一行。

  3. 输出示例:

    +--------+-------+------+
    |  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 |
    +--------+-------+------+
    

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;