如何将日期插入日期字段

时间:2017-03-03 13:19:13

标签: sql sql-server-2008 sql-server-2008-r2

this Q&A Sent_Date:此字段通常会在发送任何警报时进行更新,如果没有警报,那么特定日期将不会有警报发送日期的任何条目。

要求:虽然没有警报,但我希望将日期插入表中,可能将相应的值设为NULL / 0。我没有问题

根据附图所示的AS。在1月12日之后,下一个警报发送日期是JAN 20。 但对我来说,如果没有警报,我需要插入空白数据的日期。

请帮帮我

1 个答案:

答案 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

日历和数字表格参考