相关疑难解决方法(0)

按时间顺序聚合每天,不使用非等值逻辑

初步问题

给定以下数据集与日期表配对:

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)

sql t-sql sql-server join date

17
推荐指数
2
解决办法
611
查看次数

标签 统计

date ×1

join ×1

sql ×1

sql-server ×1

t-sql ×1