2011-10-24 24 views
0

フォルトイベントの開始( "Faults")列は、開始( "01:10:2011 12:45:59")と終了(開始の形式)を表します。私のクエリは、各イベントの平均持続時間(end-start)をとります。タイムスタンプ/月ごとのSQLグループ

タイムスタンプが上記の形式で表示されることを念頭に置いて、月単位でイベントのグループ化の平均期間を調べたいと思います。だから、私のテーブルのイベントがある場合:

A|SERVICE|  END  |  START 
1|ADSL |1/11/2011 10:00:00 |4/11/2011 10:00:00 
2|ADSL |6/11/2011 12:00:00 |6/11/2011 24:00:00 
3|ADSL |5/12/2011 10:00:00 |6/12/2011 10:00:00 
4|ADSL |7/12/2011 12:00:00 |8/12/2011 24:00:00 

のグルーピング結果(日中)11月のライン1,2 ([3days+0.5day]/2= 1.75d)の平均期間であることが、12月の3,4の平均期間はあることでしょうあなたのデータは複数のyにまたがる場合は非常に重要ですGROUP BYで年を含む

SELECT DATENAME(month, MIN(Start)) AS [Month], DATEPART(YEAR, Start) As [Year], CONVERT(FLOAT, AVG(DATEDIFF(hour, Start,[End])))/24 AS [Days] 
    FROM Faults 
    GROUP BY DATEPART(Month, Start), DATEPART(Year, Start) 

:1.25日

NOVEMBER|1.75 
DECEMBER|1.25 
+0

どのSQL-DBをお使いですか? –

+0

待って、あなたの 'タイムスタンプ'は実際の 'タイムスタンプ'タイプではなく、フォーマットされた文字列であると言っていますか?そうであれば、実際のタイプを使用してデータベースを変換するのにかかる時間に投資してください。オンザフライ変換はかなりの時間を食べるかもしれません(あなたが無効なデータから保護されていないという事実の他に... )。そして、異なるDBはタイムスタンプを別々に扱います - DB2はあなたに近似を与えることができます(例えば、あなたが何となく重い計算をしない限り)。 –

答えて

1

使用DATEPARTは上のグループに月の値を取得します障害が月の変更にまたがる場合はもちろん

:-)耳は、あなたは何をすべきかを決定する必要があります(終了または開始月に起因する全体の障害がある、またはそれを分割する必要がある?)