SQL查询每15分钟比较一次值,每小时显示一次结果 [英] SQL Query Compare values in per 15 minutes and display the result per hour

查看:39
本文介绍了SQL查询每15分钟比较一次值,每小时显示一次结果的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个包含2列的表。UTCTime和Values。 UTCTime以15分钟为单位递增。我想要一个查询,它可以将该值与一小时内的前一个值进行比较,并根据值是否为常量显示介于0和4之间的值。换句话说,每增加15分钟就有一个条目,该值可以是恒定的,因此我只需每小时检查每个值与前一个值的对应关系。

例如

+---------|-------+
| UTCTime | Value |
------------------|
|   12:00 |  18.2 |
|   12:15 |  87.3 |
|   12:30 | 55.91 |
|   12:45 | 55.91 |
|    1:00 |  37.3 |
|    1:15 |  47.3 |
|    1:30 |  47.3 |
|    1:45 |  47.3 |
|    2:00 |  37.3 |
+---------|-------+
在本例中,我只需要一个将12:45值与12:30和12:30至12:15进行比较的查询,依此类推。由于我们仅在一个小时内进行比较,因此常量值必须介于0和4之间(O没有常量值,1有一个类似于上例的常量值)

查询应显示:

+----------+----------------+
| UTCTime  | ConstantValues |
----------------------------|
| 12:00    | 1              |
|  1:00    | 2              |
+----------|----------------+

我只想提一下,我是SQL编程新手。 谢谢您。

参见SQL提琴here

推荐答案

下面是您需要的查询和working solution注意:我将时间范围更改为24小时

       ;with SourceData(HourTime, Value, RowNum)
  as
  (
    select 
      datepart(hh, UTCTime) HourTime, 
      Value, 
      row_number() over (partition by datepart(hh, UTCTime) order by UTCTime) RowNum
    from foo
    union 
    select 
        datepart(hh, UTCTime) - 1 HourTime, 
        Value,
        5
    from foo
    where datepart(mi, UTCTime) = 0
  )
  select cast(A.HourTime as varchar) + ':00' UTCTime, sum(case when A.Value = B.Value then 1 else 0 end) ConstantValues
  from SourceData A
   inner join SourceData B on A.HourTime = B.HourTime and
                           (B.RowNum = (A.RowNum - 1))
  group by cast(A.HourTime as varchar) + ':00'

这篇关于SQL查询每15分钟比较一次值,每小时显示一次结果的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆