イベントがいっぱいのテーブルがあります。セッションの集計表を作成するように求められました。 1つのセッションに複数のイベントがある可能性があります。セッションは、同じ到着時間を有することによって識別される。例えば(これは、単純化である私は、実際のタイムスタンプを入力していないよ):単一の行にそれを維持するために1対1の関係から1つだけを選択
ArrivalTime StartTime EndTime StaffID 0945 0950 1000 ???
MIN(StartTime)
を使用することで
とMAX(EndTime)
:
EventID ArrivalTime StartTime EndTime StaffID 1 0945 0950 0955 John 2 0945 0955 1000 Barb
のようなものになっている可能性があります。
上記の疑問符が示すように、私が問題になっているのは、単一のスタッフIDを取得していることです。スタッフの人数はそれほど重要ではありませんが、誰かが必要です。上に示したように文字列だった場合はMIN(StaffID)
で行うことができますが、私の頭の中にあるのは、StaffテーブルでStaffIDを検索し、関連するGUIDを引き出す必要があることです私のテーブルにある短いコードで。そして、GUIDはMIN()
のような機能を好きではありません。また、事態を悪化させるためには、イベントテーブルのStaffID列がNULL
であることが現実的です。そのため、左ジョイントなどを使用しなければなりません。
誰かがサブクエリを提案しましたが、明らかに私の脳は金曜日にこれを受け入れることを拒否し、それをどのように動作させるのか分かりません。問題は、2人の異なるスタッフがリストにある場合、セッションが二回表示されますということです
SELECT NEWID() AS SessionID,
e.ArrivalTime,
MIN(e.StartTime),
MAX(e.EndTime),
s.StaffGUID
FROM Events e LEFT JOIN Staff s ON e.StaffID = s.StaffID
GROUP BY e.ArrivalTime, s.StaffGUID
:ベースラインとして
は、ここに私の現在のクエリの線に沿って何かです。何か案は?
私は導出されたテーブルを使っていましたが、サブセレクトがグループについて不平を言っていたためにスピードが落ちました。 – Margaret
私は、最初のものは、相関副選択のWHEREが '... WHERE s.staffid = MIN(e.staffid)'(またはMAX、それは関係ないので)のように変更されていればうまくいくと思います。 –
@Andriy M:不要 - TOP 1は1レコードのみを返すようにします。 MINは同じものを返しません。 –