我有一组从myTable返回的结果,如下所示
2011-05-02 00:00:00.000
2011-08-01 00:00:00.000
2011-09-01 00:00:00.000
2011-10-03 00:00:00.000
2011-11-01 00:00:00.000
2011-12-01 00:00:00.000
我想编写一个返回2的查询,因为结果集中缺少2个月。所以我可以引发错误来破解代码。
如果数据集看起来像这样
2011-05-02 00:00:00.000
2011-05-02 00:00:00.000
2011-05-02 00:00:00.000
2011-05-02 00:00:00.000
2011-08-01 00:00:00.000
2011-08-01 00:00:00.000
2011-08-01 00:00:00.000
2011-08-01 00:00:00.000
再次返回2,因为缺少2个月
答案 0 :(得分:2)
试
declare @min date
declare @max date
select @min = min(date_col), @max = max(date_col)
from tbl
;with cte as (
select distinct m = month(date_col), y = year(date_col)
from tbl
)
, cal as (
select m = month(d), y = year(d)
from (
select d = dateadd(m, row_number() over(order by (select 1)) - 1, @min)
from master.dbo.spt_values
) t
where d <= @max
)
select count(1)
from cal
where not exists(
select 1
from cte
where cte.m = cal.m
and cte.y = cal.y
)