0

次のフィールドを持つテーブルがあります

Name:
Location:
Start Time:
End Time:
Total Time:

名前、場所、開始時間と終了時間は別のテーブルから抽出され、合計時間は開始時間と終了時間の差を計算して、その場所で費やされた合計時間を示します。開始時間と終了時間は、ユーザーがその場所にいた最大時間と最小時間を検索するクエリを使用して抽出されます。たとえば、典型的な結果は次のようになります。

Name: John
Location: A
Start Time: 08:00
End Time: 10:00
Total Time: 2:00

問題は、ユーザーがある場所にいて、別の場所に移動してから、同じ場所に戻ってくる可能性があることです。たとえば、別のレコードは次のようになります。

Name: John
Location: B
Start Time: 09:00
End Time: 09:30
Total Time: 0:30

したがって、ユーザーは 08:00-09:00 に場所 A にいて、次に 09:00-09:30 に B にいて、09:30-10:00 に A に戻ります。開始時間と終了時間はちょうど MIN と MAX であるため、分は常に最初にその場所に入る時間であり、最後は最後に入る時間です。ロケーション B で費やされた 0:30 分を考慮して、ロケーション A で費やされた時間からこれを差し引くように時間計算を修正する方法はありますか。一日中、それぞれの間を行き来します。

4

1 に答える 1

0

ここにアイデアがあります。次のクエリは、各ユーザーがそれぞれの場所にいる時間を返します。

select name, location,
       sum(datediff(s, starttime, endtime)) as TotalTimeInSeconds
from t
group by name, location

すべての開始時間と終了時間の個別のレコードがない場合は、元のテーブルに戻る必要があります。

元のデータに戻れない場合は、面倒な自己結合を使用してこれを行うことができます。

select t.name, t.location, 
       min(TotalTime) - sum(t2.totalTime)
from t left outer join
     t t2
     on t.name = t.name and
        t.location <> t2.location and
        t2.starttime between t.starttime and t.endtime
group by t.name, t.location

ただし、多くの処理が必要になるため、これはお勧めしません。

于 2013-01-22T16:33:58.240 に答える