我需要制作一个包含日期范围的临时表,以及几个包含占位符值 (0) 的列以供将来使用。我需要的日期是 \(startDate 和 \)endDate 之间的每个月的第一天,其中这些变量可能相隔数年。
我原来的 sql 语句是这样的:
select dbo.FirstOfMonth(InsertDate) as Month, 0 as Trials, 0 as Sales
into #dates
from customer
group by dbo.FirstOfMonth(InsertDate)
“FirstOfMonth”是一个用户定义的函数,我做了它几乎可以做到它所说的,返回提供日期的月份的第一天,时间正好是午夜。
这几乎完全符合我的需要,直到我发现我的日期偶尔会有几个月的空白,因为没有记录插入日期。由于我的结果必须仍然缺少几个月,因此我需要一种不同的方法。
我已将以下声明添加到存储过程中,以预期他们需要我需要的日期范围…
declare $startDate set $startDate = select min(InsertDate) from customer
declare $endDate set $endDate = select max(InsertDate) from customer
…但我不知道从这里做什么。
我知道这个问题 与这个问题相似, 但坦率地说,这个答案超出了我的想象(我不经常使用 SQL,而且当我这样做时,它往往是在旧版本的 SQL Server 上)并且有一些次要的让我失望的差异。
原文由 Sailing Judo 发布,翻译遵循 CC BY-SA 4.0 许可协议
这将很快填充一个包含 170 年日期的表。
然后,您可以通过 LEFT 加入该表来使用它,用于您需要的日期范围。