SQL Server - 在日期和时间范围内插入虚拟记录

时间:2013-12-18 15:32:14

标签: sql sql-server

所以我很难搞清楚我正在努力解决的问题。简而言之,我正在尝试考虑缺失数据(针对指标报告)。

实施例。我期望每个服务器每15分钟窗口有12个结果,当这个数字不满足时,我想插入一个简单标记为缺失的记录,其日期和时间对应于表中缺少的记录。 / p>

是否有人熟悉可以计算批量插入的插件,其中未满足特定数量(在本例中为12)以满足该目标?

让我们说我的桌子是这样设置的:

ID   Server   Uptime   CheckTime   Checkdate   Status

1    test1    100       12:15       1/1/13     GOOD

2    test2    100       12:15       1/1/13     BAD

3    test4    100       12:15       1/1/13     GOOD

在这种情况下,当我期待12时,只返回了3个标记。如何在没有手动过程的情况下生成剩余的9个记录并将其标记为缺失?特定ID并不重要,相关数据将是Server,Checkdate,Checktime和Status。

到目前为止我想到的想法是这样的:

dbo.tbluptime = a
dbo.tblreportingtabletest = b

Select missing, SERVER, checkdate, checktime from a 

X=a.missing

insert X rows into B
Values (MISSING, a.server, a.checkdate, a.checktime)
where b.server=a.server and b.checkdate=a.checkdate and b.checktime=a.checktime

格式化和语法无论如何。

2 个答案:

答案 0 :(得分:0)

选择符合时间范围的记录计数(在本例中为3),然后选择“expectedCount”(即12)并从中减去计数(3)。然后多次插入......

答案 1 :(得分:0)

以下是一种生成缺失记录的方法:

with n as (
      select 1 as n
      union all
      select n + 1
      from n
      where n <= 12
     ),
     dt as (
      select top 1 checktime, checkdate
      from t
     )
select NULL as id, NULL as server, NULL as uptime, dt.checktime, dt.checkdate,
       'MISSING' as status
from n cross join dt
where n.n <= 12 - (select count(*) from t)
union all
select *
from t;