sql - 子查询计算日期之间的天数
问题描述
子查询、SQL、Oracle
我是子查询的新手,希望能得到一些帮助。我的想法是先运行子查询,然后根据 trans_code = 'ABC' 的子查询过滤器执行外部查询。该查询有效,但它从所有交易代码中提取所有日期,trans_code 'ABC' 和 'DEF' 等。
最终目标是计算日期之间的天数。
表结构为:
acct_num effective_date
1234 01/01/2020
1234 02/01/2020
1234 03/01/2020
1234 04/01/2021
我想执行一个如下所示的查询:
account Effective_Date Effective_Date_2 Days_Diff
1234 01/01/2020 02/01/2020 31
1234 02/01/2020 03/01/2020 29
1234 03/01/2020 04/01/2021 395
1234 04/01/2021 0
询问:
SELECT t3.acct_num,
t3.trans_code,
t3.effective_date,
MIN (t2.effective_date) AS effective_date2,
MIN (t2.effective_date) - t3.effective_date AS days_diff
FROM (SELECT t1.acct_num, t1.trans_code, t1.effective_date
FROM lawd.trans t1
WHERE t1.trans_code = 'ABC') t3
LEFT JOIN lawd.trans t2 ON t3.acct_num = t2.acct_num
WHERE t3.acct_num = '1234' AND t2.effective_date > t3.effective_date
GROUP BY t3.acct_num, t3.effective_date, t3.trans_code
ORDER BY t3.effective_date asc
蒂亚!
解决方案
使用lead()
:
select t.*,
lead(effective_date) over (partition by acct_num order by effect_date) as next_efffective_date,
(lead(effective_date) - effective_date) as diff
from lawd.trans t
推荐阅读
- vapor - Vapor 4:创建包含 Fluent ParentProperty 的协议会导致编译器错误
- php - 表单中的嵌套 href
- javascript - Rails 缺少部分 *.js.erb
- java - 为 SSO 登录用户获取访问令牌
- python - sklearn中的RandomForestRegressor
- c - 快速傅里叶变换优化 - 如何预先计算指数?
- javascript - 菜单折叠时div宽度对齐不起作用
- swift - UIView.animateWithDuration 不应用变换
- javascript - 等待似乎不适用于箭头功能?
- ios - 使用 UIBezierPath 为 CAShapeLayer 添加阴影