如何基于trade_table与trading_days表计算实际交易日差值
计算实际交易日差值的SQL方案
原始数据表
trade_table
| id | start_date | transacted_date |
|---|---|---|
| A1 | 2022-02-14 | 2022-02-17 |
| A1 | 2022-02-17 | 2022-02-25 |
| A5 | 2022-02-15 | 2022-02-19 |
| A6 | 2022-02-21 | NULL |
trading_days
| trade_date |
|---|
| 2022-02-14 |
| 2022-02-15 |
| 2022-02-16 |
| 2022-02-17 |
| 2022-02-19 |
| 2022-02-21 |
| 2022-02-23 |
| 2022-02-25 |
需求
基于trade_table中的start_date和transacted_date字段,结合trading_days表计算实际交易日差值(若transacted_date为NULL则返回NULL)。
预期输出
| id | start_date | transacted_date | transact_in_days |
|---|---|---|---|
| A1 | 2022-02-14 | 2022-02-17 | 3 |
| A1 | 2022-02-17 | 2022-02-25 | 4 |
| A5 | 2022-02-15 | 2022-02-19 | 3 |
| A6 | 2022-02-21 | NULL | null |
解决方案
根据预期结果,需要统计**start_date之后到transacted_date之间(包含transacted_date)的交易日数量**,以下是实现SQL:
SELECT t.id, t.start_date, t.transacted_date, CASE WHEN t.transacted_date IS NULL THEN NULL ELSE ( SELECT COUNT(*) FROM trading_days td WHERE td.trade_date > t.start_date AND td.trade_date <= t.transacted_date ) END AS transact_in_days FROM trade_table t;
逻辑说明
- 用
CASE语句处理transacted_date为NULL的情况,直接返回NULL。 - 子查询关联
trading_days表,统计符合日期范围的记录数,得到实际交易日差值。
内容的提问来源于stack exchange,提问作者Shubh
相关产品推荐
相关产品推荐

