我有一个存储时间跨度数据的表。这个表的模式类似于:
ID INT NOT NULL IDENTITY(1,1)
RecordID INT NOT NULL
StartDate DATE NOT NULL
EndDate DATE NULL
我正在计算每个记录 ID 的开始和结束日期,所以最小 StartDate 和最大 EndDate。StartDate 不能为空,所以我不需要担心这个,但是我需要 MAX (EndDate)来表明这是当前运行的时间跨度。
维护 EndDate 的 NULL 值并将其视为最大值,这一点很重要。
最简单的尝试(下面)不能突出显示 MIN 和 MAX 将忽略 NULLS (来源: http://technet.microsoft.com/en-us/library/ms179916.aspx)的问题。
SELECT recordid, MIN(startdate), MAX(enddate) FROM tmp GROUP BY recordid
我已经创建了一个 SQL 小提琴的基本设置完成。
Http://sqlfiddle.com/#!3/b0a75
如何使 SQLServer2008按照我的意愿从 SQLFiddle 中给出的数据产生以下结果?
RecordId Start End
1 2009-06-19 NULL
2 2012-05-06 NULL
3 2013-01-25 NULL
4 2004-05-06 2009-12-01