我有以下架构,我已经稍微简化了:
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,
...
)
Header 表上的 StaffId 是一个外键。
标题表跟踪与员工相关的数据(在未显示的子表中),如果子表中的数据存在,则对于给定的一周,将有一个“周末”条目。在这种情况下,“周末”始终是星期日。因此,样本数据可能如下所示:
HeaderId StaffId WeekEnding
---------------------------------
1 1 13/02/2011
2 1 20/02/2011
etc...
staff 表上的“FirstWeekEnding”值是他们开始跟踪 Header 表中信息的第一个日期。
我的问题
给定每个工作人员的第一周结束日期,我如何构建一个查询来提供从 Header 表到当前日期的所有 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 分组的多个员工。