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

标签 mysql sql recursive-query

我正在 SQL Workbench 中编写代码。我有一个表,其中包含基于时间的用户信息更新。该表如下所示:

标题: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

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

因此,我希望看到这样的表格:

| 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 小时,我就只对每个独特的小时进行第一次观察。由于某个小时的第一个“时间”接近下一个“时间”的情况,它不能保证 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;

关于MySQL 问题。只取增量延迟超过 1 小时的行并递归执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57759256/

相关文章:

sql - SELECT AS 到所有表

sql - 在附加到列名和使用 bool 逻辑时使用 crosstab() 函数

sql - 递归查询

java - 在处理遗留数据库时,Hibernate 会因丢失的行而窒息

php - 在(纯)PHP/MySQL 中查找类似图像

php - 从数据库中选择数据,然后再次插入数据库 codeigniter

mysql - 在列中添加临时逗号而不更新任何表

mysql - SQL select where 列子句

sql-server - 是否可以强制SQL Server使用我想要优化递归cte查询的计划

mysql - 如何创建MySQL分层递归查询