首页 > 解决方案 > SQL中如何计算一个日期是否在两个日期之内?

问题描述

我有一个如下所示的表:

帐户 # 开放日期 结束日期
123 2018 年 1 月 1 日 2019 年 4 月 4 日
234 2018 年 1 月 3 日 2018 年 3 月 4 日

我正在尝试创建一个在年底计算未结帐户的表格,如下所示:

年终日期 # 开户数
2018 2018 年 12 月 31 日 1

我还有一张带有规范日期的表格,它只是一张装满日期的巨型表格。有许多帐户具有许多打开和关闭日期。开放日期早在 2001 年,关闭日期截至今天(包括今天)。一个账户只能有一个开放日期,而不是一个关闭日期——在这种情况下,它将被计算为当年的开放日期。

使用 SQL 实现此目的的好方法是什么?

标签: sqldatetimecountinner-joinsnowflake-cloud-data-platform

解决方案


您可以加入规范日期表并聚合:

select d.year, d.end_of_year_date, count(distinct t.account#) as cnt_open_accounts
from (
    select d.*, max(d.date) over(partition by d.year) as end_of_year_date
    from canonicaldate d
) d
inner join mytable t on d.date between t.open_date and t.close_date
group by d.year, d.end_of_year_date

推荐阅读