次の構造を持つ CampRegistration というテーブルがあります。
[EID] INT, [CampName] VARCHAR(100), [StartDt] DATETIME
EID は、キャンプに参加した人の識別子です。CampRegistration テーブル内の各人が特定の日付より前に参加した最後のキャンプを選択したいと考えています。
これが私の最初の試みでした:
@DECLARE @currentCampDt DATETIME = '2012-8-4';
SELECT [EID], [CampName], MAX([StartDt]) [StartDt]
FROM [CampRegistration]
WHERE [StartDt] < @currentCampDt
GROUP BY [EID],[CampName]
order by [EID]
ここでの問題は、誰かが異なる名前で複数のキャンプに参加した場合、その人に対して複数の結果が得られることです (各キャンプ名の最後に参加したもの)。私は、参加者が最後に参加したキャンプの記録を 1 人につき 1 つだけ取得したいと考えています。最終的には、各レコード (EID、CampName、およびキャンプの StartDt) についてこれら 3 つの情報を取得する必要があるため、実際に から CampName を削除できるかどうかはわかりませんGroup By
。
私は SQL Server 2012 を使用していますが、このタイプのクエリ結果を実装する方法についての提案をいただければ幸いです。
ありがとう。