次のスキーマがありますが、少し簡略化しています。
CREATE TABLE [dbo].[Header] (
[HeaderId] [int] IDENTITY(1,1) NOT NULL,
[StaffId] [int] NOT NULL,
[WeekEnding] [smalldatetime] NOT NULL,
...
)
CREATE TABLE [dbo].[Staff] (
[StaffId] [int] NOT NULL,
[FirstWeekEnding] [smalldatetime] NULL,
...
)
ヘッダーテーブルのStaffIdは外部キーです。
ヘッダーテーブルは、スタッフに関連するデータを追跡し(サブテーブルには表示されていません)、サブテーブルにデータが存在する場合、特定の週に「週末」のエントリがあります。この場合、「週末」は常に日曜日です。したがって、サンプルデータは次のようになります。
HeaderId StaffId WeekEnding
---------------------------------
1 1 13/02/2011
2 1 20/02/2011
etc...
スタッフテーブルの「FirstWeekEnding」値は、ヘッダーテーブルの情報の追跡を開始した最初の日付です。
私の質問
各スタッフの最初の週の終了日を前提として、ヘッダーテーブルから現在の日付までのすべてのMISSINGレコードを取得するクエリを作成するにはどうすればよいですか?
たとえば、次のデータがあるとします。
StaffId FirstWeekEnding
---------------------------
1 02/01/2011
HeaderId StaffId WeekEnding
---------------------------------
1 1 02/01/2011
2 1 09/01/2011
3 1 16/01/2011
4 1 13/02/2011
5 1 20/02/2011
結果は次のようになります。
StaffId WeekEnding
---------------------
1 23/01/2011
1 30/01/2011
1 06/02/2011
理想的には、クエリは、StaffIdでグループ化された複数のスタッフメンバーを処理する必要があります。