2011-07-12 5 views
1

私は以下のようなデータを持つテーブルtblTask​​を持っています。SQL Serverの時間差を計算しますか?

TID StartTime     Uid WId 
1  2011-06-06 09:30:00.000  10 1.5 
2  2011-06-06 09:40:00.000  10 2.5 
3  2011-06-06 09:50:00.000  10 1.8 
4  2011-06-06 09:55:00.000  10 2.5 
5  2011-06-06 10:30:00.000  10 1.5 
6  2011-06-06 11:30:00.000  11 3.0 

Iは、時間差を1時間又は1時間に近いを有する他STARTTIME各STARTTIMEの時間差に基づいて、和(WID)を計算するために照会するために記述する必要があります。

たとえば、最初の開始時間を取る(2011-06-06 09:30:00.000)。 < = 1時間の最も近い開始時間は(2011-06-06 10:30:00.000)であり、SUM(Wid)は1.5 + 2.5 + 1.8 + 2.5 + 1.5 = 9.8である。同様に、すべての行を計算する必要があります。

所望の出力は次のようになります。

TID StartTime     EndTime     TimeDIff(Min) Uid WId 
1  2011-06-06 09:30:00.000 2011-06-06 10:30:00.000 60   10  9.8 
2  2011-06-06 09:40:00.000 2011-06-06 10:30:00.000 50   10  8.3 
+2

間の時間差を与えるだろう、なぜあなたのテーブルには名前がありませんか?テーブル名を残すことは、SOに関するSQLの質問における最も一般的な誤りです。また、どのUID値を印刷する必要がありますか?最小、最大、平均、最初、最後または他の何か? –

+0

@Jonathan申し訳ありません私はテーブル名、私たちが選んだスタートタイムのUID値について言及するのを忘れていました。 – Simhadri

答えて

2

が、これはあなたが必要なものを与えていますか?

SELECT t1.TID, min(t1.StartTime) AS StartTime, MAX(t2.StartTime) AS EndTime, 
    MAX(DATEDIFF(MI, t1.StartTime, t2.StartTime)) AS [TimeDiff(Min], 
    t1.Uid, SUM(t2.WId) AS WId 
FROM MyTable t1 
JOIN MyTable t2 on datediff(MI, t1.starttime, t2.StartTime) BETWEEN 0 AND 60 
GROUP BY t1.TID, t1.Uid 
ORDER BY t1.TID 
0

コードのこのブロックはあなたにStartTimeEndTime

DECLARE @STARTDATE DATETIME = '10:15:45' 
DECLARE @ENDDATE DATETIME = '14:00:15' 
DECLARE @24DATE DATETIME 
SET @24DATE = '23:59:59.000' 

IF (@STARTDATE > @ENDDATE) 
    SELECT DATEADD(SECOND, 1, CONVERT(TIME(0), (@24DATE -(@ENDDATE - @STARTDATE)))) 
ELSE 
    SELECT CONVERT(TIME(0), ((@ENDDATE - @STARTDATE)))