尝试以以下格式获取数据库中的事件数:
date numberOfIncidents date numberOfIncidents date numberOfIncidents date numberOfIncidents
我将开始日期/结束日期提供给我的SQL存储过程,但是如果数据库中没有针对特定日期的条目(因为未发生任何事件),那么我将无法获得完整范围。
我想要的是在开始/结束日期之间返回的每个日期,旁边都有一个值。
在SQL Server中可以吗?
您可以使用递归公用表表达式来生成日期范围,然后将其加入事件中。
WITH DateRange(date) AS ( SELECT @dateFrom date UNION ALL SELECT DATEADD(dd, 1, date) date FROM DateRange WHERE date < @dateTo ) SELECT DateRange.date, count(incident.id) FROM DateRange LEFT OUTER JOIN incident ON incident.date >= DateRange.date AND incident.date < DATEADD(dd, 1, DateRange.date) GROUP BY DateRange.date ORDER BY DateRange.date
默认情况下,SQL Server将递归定义限制为100行。如果您需要100个以上的日期行,请追加OPTION (MAXRECURSION n)到查询末尾,更改n为所需的行数。
OPTION (MAXRECURSION n)
n