sql - SQL中如何计算一个日期是否在两个日期之内?
问题描述
我有一个如下所示的表:
帐户 # | 开放日期 | 结束日期 |
---|---|---|
123 | 2018 年 1 月 1 日 | 2019 年 4 月 4 日 |
234 | 2018 年 1 月 3 日 | 2018 年 3 月 4 日 |
我正在尝试创建一个在年底计算未结帐户的表格,如下所示:
年 | 年终日期 | # 开户数 |
---|---|---|
2018 | 2018 年 12 月 31 日 | 1 |
我还有一张带有规范日期的表格,它只是一张装满日期的巨型表格。有许多帐户具有许多打开和关闭日期。开放日期早在 2001 年,关闭日期截至今天(包括今天)。一个账户只能有一个开放日期,而不是一个关闭日期——在这种情况下,它将被计算为当年的开放日期。
使用 SQL 实现此目的的好方法是什么?
解决方案
您可以加入规范日期表并聚合:
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
推荐阅读
- python - 如何使用 sys.modules 和 mock.patch 进行模拟(Python 对静态函数的干扰)
- javascript - Puppeteer 打开下拉菜单,然后单击 [1st 2nd 3rd...] 选项
- android - React Native Expo:在 ViewPager 中放置相机
- python - Discord BOT - DM 离开服务器的人
- c++ - SDL2 Windows 未定义对 Eclipse 的“WinMain@16”的引用
- ios - 在 SwiftUI 中使用谷歌登录时来自 OIDAuthorizationService 的 NSInvalidArgumentException
- regex - 如何以非贪婪的方式从许多实例中匹配“{*各种*字符串*}”?
- vb.net - 无法加载错误版本的 SQL Server 程序集
- python - 在新的 for 循环中使用存储在旧 for 循环中的项目名称
- oracle - 找不到 Oracle Apex AOP 服务器。检查它是否正在运行