mysql - 如何从每十二小时发生的每个“组”事件中提取第一个时间戳
问题描述
假设我们有一个包含两列的表:station_id 和时间戳。我实现了两个站点,它们设置为大约每 12 小时播放一次天气变化。这些流流了几分钟。
让我们以这张表为例:
station_id timestamp
----------------------------------
station_1 2019-06-02 09:01:10
station_1 2019-06-02 09:01:13
station_1 2019-06-02 21:05:10
station_1 2019-06-02 21:08:15
station_2 2019-06-02 09:30:10
station_2 2019-06-02 09:31:10
station_2 2019-06-02 21:40:11
station_2 2019-06-02 21:40:12
我的目标是分析流式数据并检查我的两个流媒体是否按应有的规律进行流式传输。定期我的意思是每 12 小时一次。
输出应该是这样的
station_id timestamp
----------------------------------
station_1 2019-06-02 09:01:10
station_1 2019-06-02 21:05:10
station_2 2019-06-02 09:30:10
station_2 2019-06-02 21:40:11
我只考虑了一天,但它应该能够处理几天的数据。
我想我需要按 station_id 和间隔以某种方式分组,并且只显示间隔开始时间戳
解决方案
我想你只是想要lag()
。像这样的东西:
select t.*
from (select t.*,
lag(timestamp) over (partition by station order by timestamp) as prev_timestamp
from t
) t
where prev_timestamp is null or
prev_timestamp < timestamp - interval 11 hour;
这使用 11 小时而不是 12 小时只是为了为重复测量提供一些余地。
请注意,日期/时间函数因数据库而异。以上适用于MySQL。在另一个数据库中可能会略有不同。
推荐阅读
- geodjango - 如何使用 react-leaflet 添加 onEachFeature 绑定
- javascript - 如何将嵌套的 json 加载到 JavaScript 中的 GoJS Regrouping 中?
- python-3.x - Matplotlib pcolormesh 与日期时间对象不兼容
- c++ - 如何使用 typedef 和定义
- python - 在 Python 中编写 Discord 机器人 - 嵌入字段值的长度是否有限制?
- javascript - 如何在鼠标悬停期间反转黑色以使其可见?
- google-sheets - Arrayformula 将 A 列的复选框视为一个实体。它将所有复选框的时间戳更新为当前时间戳
- vue.js - Cliente socket-io 在 Vue 3 中未触发事件“连接”
- javascript - 在这种情况下,“可深度链接”是什么意思
- c - 我没有使用结构得到任何输出