2011-12-19 10 views
2

datetime_in、datetime_out、card_id、groupを持つテーブルがあります。SQLクエリが15分に壊れる

group ; date  ; quarterTime ; persons_in ; hours 
group1 ; 17-02-2010 ; 00:00 - 00:15 ; 0   ; 0 
group1 ; 17-02-2010 ; 00:15 - 00:30 ; 0   ; 0 
group1 ; 17-02-2010 ; 00:30 - 00:45 ; 0   ; 0 
~etc 
group1 ; 17-02-2010 ; 13:00 - 12:15 ; 334  ; 1483 

end then the same for all the groups starting with 00:00 until 23:45 

ので、私は、グループごとにグループ化されたレコード、(日中)の日付とquarterTimeを持ちたい日の各quearterのために:私は、次の事項で出力をしたい知っています。それからpersons_inで、私はその四半期内のレコード数と、現在の四半期の終わりまでその日に合計何人人時間が働いている時間を欲しい。そのため、人数はその四半期にしかないのに対し、1日当たり高額と高額になる。だから私の質問は、私は今、本当に汚いC#のスクリプトをこれを行って、私が実行したい最適化はちょうど1つのクエリです。

私はストアドプロシージャを使用していませんが、私は本当にSQLで良い私はT - SQLを好むので、私は心配しないでください。

誰もがこれを行う方法を考えていますか?例?

+1

15分間のグループ化部分は、[SQL - 開始/終了時刻を15分レコードに分割]の複製です(http://stackoverflow.com/questions/2921760/sql-break-a-start-end-time - 15分の記録)。実行中の合計部分は[SqlServerでの実行中の合計の計算](http://stackoverflow.com/questions/860966/calculate-a-running-total-in-sqlserver)の複製です。 – GSerg

+0

ありがとうございます。ikはSqlServerの計算合計を使用できますが、ブレークの開始/終了時間は15分になります。 – Eijso

答えて

2

あなたは、グループ化のためにあなたの日付を変換するために、このロジックを使用することができます。

SELECT 
     CONVERT(bigint,Year(GETDATE())) * power(10,7) + 
     Month(GETDATE()) * POWER(10,5) + 
     Day(GETDATE()) * POWER(10,3) + 
     Datepart(hh,GETDATE()) * POWER(10,1) + 
     DATEPART(mi,GETDATE())/15 AS Agg_Date 

19/12/2011 13:31 => 20111219132

各15分には同じキーを持っています。

関連する問題