首页 > 解决方案 > SQL Query 从表中获取不同的值以及有序行之间的差异

问题描述

我有一个带有不同数据点时间戳的实时数据表 Time_stamp, UID, Parameter1, Parameter2, ....

我有 400 个 UID,所以每个 time_stamp 重复 400 次

我想编写一个使用此表的查询来检查流向 SQL 数据库的实时数据流是否按预期工作 - 每 5 分钟应该有新的时间戳可用

为此,我通常做的是查询表中 time_stamp 的 DISTINCT 值并按降序排列 - 进行目视检查并复制到 excel 以计算后续不同 time_stamp 之间的分钟差

超过 5 分钟的任何差异都意味着我有问题。我试图弄清楚如何在 SQL 中做类似的事情,也许得到一个看起来像这样的表。尝试同时使用 LEAD 和 DISTINCT 但无法自己编写代码,我刚刚开始使用 SQL

Time_stamp,领先于最后一个时间戳

谢谢您的帮助

标签: mysqlsqldistinct

解决方案


您可以使用lag如下分析函数:

select t.* from
(select t.*
       lag(Time_stamp) over (order by Time_stamp) as lg_ts
  from your_Table t)
where timestampdiff('minute',lg_ts,Time_stamp) > 5

或者你也可以使用not exists如下:

select t.* 
  from your_table t
 where not exists
       (select 1 from your_table tt
         where timestampdiff('minute',tt.Time_stamp,t.Time_stamp) <= 5)
   and t.Time_stamp <> (select min(tt.Time_stamp) from your_table tt)

推荐阅读