this Q&A Sent_Date:此字段通常会在发送任何警报时进行更新,如果没有警报,那么特定日期将不会有警报发送日期的任何条目。
要求:虽然没有警报,但我希望将日期插入表中,可能将相应的值设为NULL / 0。我没有问题
根据附图所示的AS。在1月12日之后,下一个警报发送日期是JAN 20。 但对我来说,如果没有警报,我需要插入空白数据的日期。
请帮帮我
答案 0 :(得分:0)
如果您只想让查询返回给定范围内每天的警报计数,您可以使用日历表或cte生成所需的日期范围,然后加入您的来源提醒和计算每天的警报。
declare @fromdate date = '20170101'
declare @thrudate date = '20170131'
;with n as (select n from (values(0),(1),(2),(3),(4),(5),(6),(7),(8),(9)) t(n))
, dates as (
select top (datediff(day, @fromdate, @thrudate)+1)
[Date]=convert(datetime,dateadd(day, row_number() over (order by (select 1)) -1, @fromdate))
,[NextDate]=convert(datetime,dateadd(day, row_number() over (order by (select 1)), @fromdate))
from n as deka
cross join n as hecto /* 100 days */
cross join n as kilo /* 2.73 years */
--cross join n as [tenK] /* 27.3 years */
order by [Date]
)
select d.Date
, count(*) as Alerts
from dates d
left join alerts a
on a.sent_date >= d.Date
and a.sent_date < d.NextDate
group by dates.Date
日历和数字表格参考