1

2列のテーブルがあります。UTCTime と値。UTCTime は 15 分刻みです。値を 1 時間間隔で前の値と比較し、値が定数であるかどうかに応じて 0 から 4 の値を表示するクエリが必要です。つまり、15 分ごとにエントリがあり、値は定数である可能性があるため、各値を 1 時間ごとに前の値と照合するだけで済みます。

例えば

+---------|-------+
| 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 などと比較するクエリが必要です。1 時間の範囲で比較しているため、定数値は 0 から 4 の間でなければなりません (O 定数値はありません。1 は上記の例のようなものです)。

クエリは次のように表示されます。

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

私はSQLプログラミングが初めてであることを言いたかっただけです。ありがとうございました。

ここでSQLフィドルを参照してください

4

3 に答える 3

1

以下は、必要なクエリと実用的なソリューションです。注: 時間枠を 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'
于 2013-06-27T16:30:48.873 に答える
0
select SUBSTRING_INDEX(UTCTime,':',1) as time,value, count(*)-1 as total
from foo group by value,time having total >= 1;

フィドル

于 2013-06-27T16:48:07.667 に答える