Ton*_*ich 7 sql t-sql sql-server sql-server-2005 gaps-and-islands
我有一个连续每小时记录的表.每小时都有一些价值.我想要一个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
Run Code Online (Sandbox Code Playgroud)
Qua*_*noi 17
假设所有记录都是确切的小时数:
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)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3554 次 |
| 最近记录: |