我有一个连续每小时记录的表.每小时都有一些价值.我想要一个T-SQL查询来检索丢失的记录(缺少时间,间隙).因此,对于下面的DDL,我应该获得缺失小时的记录04/01/2010 02:00 AM(假设日期范围在第一个和最后一个记录之间).使用sql Server 2005.首选基于集合的查询.
- DDL:
- CREATE TABLE [Readings](
- [StartDate] [datetime] NOT NULL,[SomeValue] [int] NOT NULL
- )
- INSERT INTO [Readings]([StartDate],[SomeValue])
- SELECT '20100401 00:00:00.000',2 UNION ALL
- SELECT '20100401 01:00:00.000',3 UNION ALL
- SELECT '20100401 03:00:00.000',45
解决方法
假设所有记录都是精确的小时:
- WITH q(s,e) AS
- (
- SELECT MIN(StartDate),MAX(StartDate)
- FROM Readings
- UNION ALL
- SELECT DATEADD(hour,1,s),e
- FROM q
- WHERE s < e
- )
- SELECT *
- FROM q
- WHERE s NOT IN
- (
- SELECT StartDate
- FROM Readings
- )
- OPTION (MAXRECURSION 0)