mysql - 如何从每 12 小时发生的事件的每个 "group"中提取第一个时间戳

标签 mysql sql apache-spark

假设我们有一个包含两列的表:station_id 和 timestamp。我实现了两个站点,它们设置为大约每 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 中有效。它在另一个数据库中可能略有不同。

关于mysql - 如何从每 12 小时发生的事件的每个 "group"中提取第一个时间戳,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57624972/

相关文章:

php - PHP 中的 UNION MySQL 结果将取决于第一个选择的列

php - 我的 sql 语句或我的 php 代码有什么问题?

scala - 按键减法的功能相反

mysql - 玛丽亚数据库/MySQL : replacing an unicode character by another one doesn't work (0 rows affected)

php - 更改json_encode()输出结构

sql - 如何将 SQL 选择查询更改为 SQL Server CE 中的新表?

apache-spark - 如何将具有 (key1, list(key2, value)) 结构的列表转换为 pyspark 中的数据帧?

Azure Synapse Spark LIVY_JOB_STATE_ERROR

mysql - 如何通过日常交易获得不同的用户

mysql - MySQL 中何时使用单引号、双引号和反引号