0

クエリがあり、それを変更したいだけです (このクエリは私が作成したものではありません)。

SELECT  CAST(DATEPART(yyyy, UTCTimeStamp) AS VARCHAR(4)) + '-'
        + CAST(DATEPART(mm, UTCTimeStamp) AS VARCHAR(2)) + '-'
        + CAST(DATEPART(dd, UTCTimeStamp) AS VARCHAR(2)) + ' '
        + CAST(DATEPART(hh, UTCTimeStamp) AS VARCHAR(2)) + ':00:000 - '
        + CAST(DATEPART(yyyy, UTCTimeStamp) AS VARCHAR(4)) + '-'
        + CAST(DATEPART(mm, UTCTimeStamp) AS VARCHAR(2)) + '-'
        + CAST(DATEPART(dd, UTCTimeStamp) AS VARCHAR(2)) + ' '
        + CAST(DATEPART(hh, UTCTimeStamp) AS VARCHAR(2)) + ':45:000' AS HourTime ,
        SUM(CASE WHEN ElapsedValue IS NULL THEN 1
                 ELSE 0
            END) AS NoData ,
        SUM(CASE WHEN ElapsedValue = 0 THEN 1
                 ELSE 0
            END) AS ZeroData
FROM    tblLive_TrendLog_15Min
WHERE   ISNULL(ElapsedValue, 0) = 0
GROUP BY CAST(DATEPART(yyyy, UTCTimeStamp) AS VARCHAR(4)) + '-'
        + CAST(DATEPART(mm, UTCTimeStamp) AS VARCHAR(2)) + '-'
        + CAST(DATEPART(dd, UTCTimeStamp) AS VARCHAR(2)) + ' '
        + CAST(DATEPART(hh, UTCTimeStamp) AS VARCHAR(2)) + ':00:000 - '
        + CAST(DATEPART(yyyy, UTCTimeStamp) AS VARCHAR(4)) + '-'
        + CAST(DATEPART(mm, UTCTimeStamp) AS VARCHAR(2)) + '-'
        + CAST(DATEPART(dd, UTCTimeStamp) AS VARCHAR(2)) + ' '
        + CAST(DATEPART(hh, UTCTimeStamp) AS VARCHAR(2)) + ':45:000'

このクエリを実行すると、次のように表示されます。

HourlyTime                          ZeroData       NULL    
2013-6-8 23:00:000 - 2013-6-8 23:45:000 0   40    
2013-6-8 3:00:000 - 2013-6-8 3:45:000   0   52    
2013-6-8 7:00:000 - 2013-6-8 7:45:000   0   52    
2013-6-9 3:00:000 - 2013-6-9 3:45:000   0   52    
2013-6-9 4:00:000 - 2013-6-9 4:45:000   0   52    
2010-1-1 12:00:000 - 2010-1-1 12:45:000 0   36    
2010-1-1 13:00:000 - 2010-1-1 13:45:000 0   27    
2010-1-1 15:00:000 - 2010-1-1 15:45:000 0   30

基本的に、1時間あたりのゼロ値とヌル値を計算しています。詳細については、次のリンクを参照してください: SQL プログラミング 4 行を 1 つに結合し、3 列を追加する

ここで、そのクエリに別の列を追加して、定数値があるかどうかを計算し、定数値の数 (0 から 3 の間である必要があります) を表示します。たとえば、値が 2013-05-4 10 の場合:30 は 2013 年 5 月 4 日 10:15 と同じ値を持ち、ConstantData 列で 1 になるはずです。基本的に、15 分ごとに値を前回の値と比較します。

4

1 に答える 1

0

これは重複した質問だと思いますが、SQL 2012 では FORMAT 関数を使用してクエリを大幅に簡素化できることを指摘したかっただけです。

SELECT  FORMAT(UTCTimeStamp ,'yyyy-MM-dd hh:00:000 - yyyy-MM-dd hh:45:000 ')AS HourTime ,
        SUM(CASE WHEN ElapsedValue IS NULL THEN 1
                 ELSE 0
            END) AS NoData ,
        SUM(CASE WHEN ElapsedValue = 0 THEN 1
                 ELSE 0
            END) AS ZeroData
FROM    tblLive_TrendLog_15Min
WHERE   ISNULL(ElapsedValue, 0) = 0
GROUP BY FORMAT(UTCTimeStamp ,'yyyy-MM-dd hh:00:000 - yyyy-MM-dd hh:45:000 ')
于 2013-06-27T17:53:31.737 に答える