给定以下数据集与日期表配对:
MembershipId | ValidFromDate | ValidToDate
==========================================
0001 | 1997-01-01 | 2006-05-09
0002 | 1997-01-01 | 2017-05-12
0003 | 2005-06-02 | 2009-02-07
Run Code Online (Sandbox Code Playgroud)
Memberships在任何一天或几天的时间里有多少人开放?
下面这个问题被问在这里,这个答案提供了必要的功能:
select d.[Date]
,count(m.MembershipID) as MembershipCount
from DIM.[Date] as d
left join Memberships as m
on(d.[Date] between m.ValidFromDateKey and m.ValidToDateKey)
where d.CalendarYear = 2016
group by d.[Date]
order by d.[Date];
Run Code Online (Sandbox Code Playgroud)
虽然一位评论者评论说,当非等值的时间太长时,还有其他方法.
因此,equijoin只有逻辑看起来像复制上面查询的输出?
从目前为止提供的答案中我得出了以下内容,它在我使用的320万Membership条记录的硬件上表现优异:
declare @s date = '20160101';
declare @e date = getdate();
with s …Run Code Online (Sandbox Code Playgroud)