我需要能够过滤数据集,每3小时只显示第一个示例。如果找到一个示例,则应隐藏其后3小时内发生的任何其他示例。
我能找到的就是 date_trunc
每小时得到一次初审,但我需要在初审后3个小时内具体隐藏。
示例数据:
+------------------------+-------+
| Timestamp | Value |
+------------------------+-------+
| "2015-12-29 13:35:00" | 65 |
| "2015-12-29 13:40:00" | 26 |
| "2015-12-29 13:45:00" | 80 |
| "2015-12-29 13:50:00" | 10 |
| "2015-12-29 16:40:00" | 76 |
| "2015-12-29 16:45:00" | 73 |
| "2016-01-04 08:05:00" | 87 |
| "2016-01-04 08:10:00" | 90 |
| "2016-01-04 08:15:00" | 52 |
| "2016-01-04 08:20:00" | 90 |
| "2016-01-04 08:25:00" | 23 |
| "2016-01-04 08:30:00" | 96 |
| "2016-01-04 13:35:00" | 53 |
| "2016-01-04 13:40:00" | 15 |
| "2016-01-04 13:45:00" | 85 |
+------------------------+-------+
预期结果:
+------------------------+-------+
| Timestamp | Value |
+------------------------+-------+
| "2015-12-29 13:35:00" | 65 |
| "2015-12-29 16:40:00" | 76 |
| "2016-01-04 08:05:00" | 87 |
| "2016-01-04 13:30:00" | 7 |
+------------------------+-------+
Anyone have any ideas? Thank you so much for your help.
1条答案
按热度按时间bvhaajcl1#
这是一个棘手的问题,因为您需要跟踪最后一个选择的记录,以确定下一个-所以您不能只是
group by
每隔3小时。下面是一种使用递归cte的方法:
其思想是从表中最早的记录开始,然后通过选取至少3小时后的第一条可用记录进行迭代(这假设timestamp列中没有重复的记录)。
请注意
timestamp
不是一个好的列名选择,因为它与语言关键字(即数据类型)冲突。我把它发回监狱ts
在查询中。db小提琴演示: