Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/87.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 如何从每12小时发生的每个“组”事件中提取第一个时间戳_Mysql_Sql_Apache Spark - Fatal编程技术网

Mysql 如何从每12小时发生的每个“组”事件中提取第一个时间戳

Mysql 如何从每12小时发生的每个“组”事件中提取第一个时间戳,mysql,sql,apache-spark,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

假设我们有一个包含两列的表: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
我只考虑了一天,但它应该能够处理几天的数据

我想我需要以某种方式按站点id和间隔分组,只显示间隔开始时间戳,我想你只需要滞后。大概是这样的:

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中工作。在另一个数据库中可能会稍有不同。

我想您只是想要延迟。大概是这样的:

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中工作。在另一个数据库中可能会略有不同。

我想我不太明白您要返回的是什么。@草莓对不起,如果我不够清楚的话。我的目标是每隔几分钟进行一次streamers interval(每12小时一次),从该时间间隔中提取第一行流数据,并在tableau中显示。如果我在图表上看到某个站点在某个时间的值,这意味着该站点做了它应该做的工作。我想我真的不明白你想返回的是什么。@草莓对不起,如果我不够清楚的话。我的目标是每隔几分钟进行一次streamers interval(每12小时一次),从该时间间隔中提取第一行流数据,并在tableau中显示。如果我在图表上看到某个站点在某个时间的值,这意味着该站点完成了它应该完成的工作。感谢您的快速回答,我在SQL方面没有我应该的那么熟练。作为一名学生,我还没有使用滞后函数。我会尽快看一看。我随机决定给谁贴标签。我会更深入地研究你的解决方案。@stevo92。没有可比性。lag是实现这一点的正确方法,而不是自连接。感谢您的快速回答,我在SQL方面没有我应该精通的那么多。作为一名学生,我还没有使用滞后函数。我会尽快看一看。我随机决定给谁贴标签。我会更深入地研究你的解决方案。@stevo92。没有可比性。lag是实现这一点的正确方法,而不是自连接。