MySQL 问题。只取增量延迟超过 1 小时的行并递归执行

MySQL issue. Take only rows with more than 1 hour delta delay and do it recursively

我正在 SQL Workbench 中编写代码。我有 table 和 time-based 用户信息更新。 table 看起来像这样:

标题:client_val_time

| id  | cl_id | time_captured       | value
| 100 | 1     | 2019-08-01 15:35:00 | 3.1
| 101 | 1     | 2019-08-01 15:36:00 | 3.2
| 102 | 1     | 2019-08-01 15:37:00 | 3.234
| 103 | 1     | 2019-08-01 15:45:00 | 3.5
| 104 | 1     | 2019-08-01 16:40:00 | 5
| 105 | 1     | 2019-08-01 17:00:00 | 5.1
| 107 | 1     | 2019-08-01 17:45:00 | 5.534
| 108 | 1     | 2019-08-01 18:50:00 | 3.21

问题是我不需要所有的观察,因为它们的噪声性质,而且一些内存原因不允许这样做。对我来说理想的 timedelta 是 1 小时以上。

因此,我想看到这样的 table:

| id  | cl_id | time_captured       | value
| 100 | 1     | 2019-08-01 15:35:00 | 3.1
| 103 | 1     | 2019-08-01 15:45:00 | 3.5
| 107 | 1     | 2019-08-01 17:45:00 | 5.534
| 108 | 1     | 2019-08-01 18:50:00 | 3.21

我试图找出解决这个问题的方法,但我无法解决这个问题。 也许还有其他方法可以解决这个问题,我不需要所有的观察结果,因为值列变化不大,而且我无法加载完整的数据集以使用其他工具对其进行过滤。 如果有任何建议,我将不胜感激。

我想出了最适合我需要的近似解决方案。只要我只需要延迟 1 小时,我就只对每个独特的小时进行第一次观察。由于第一个 'time' 接近下一个小时的情况,它不能保证 1+ 小时的延迟。

select w_0.id, w_0.cl_id, 
       w_0.time_captured,
       w_0.value
from client_val_time w_0 inner join
(
    select  w.cl_id, 
            year(time_captured) as year_time,
            month(time_captured) as month_time,
            day(time_captured) as day_time,
            hour(time_captured) as hour_time,
            min(w.id) as min_id
    from client_val_time w
    group by w.cl_id, year_time, month_time, day_time, hour_time
) loc_val on loc_val.min_id=w_0.id;