【问题标题】:SQL : create intermediate data from date rangeSQL:从日期范围创建中间数据
【发布时间】:2022-01-15 15:07:19
【问题描述】:
我有一张如下图所示的表格:
| USER |
ROI |
DATE |
| 1 |
5 |
2021-11-24 |
| 1 |
4 |
2021-11-26 |
| 1 |
6 |
2021-11-29 |
我想获得其他日期之间日期的投资回报率,预期结果如下
从 2021 年 11 月 24 日到 2021 年 11 月 30 日
| USER |
ROI |
DATE |
| 1 |
5 |
2021-11-24 |
| 1 |
5 |
2021-11-25 |
| 1 |
4 |
2021-11-26 |
| 1 |
4 |
2021-11-27 |
| 1 |
4 |
2021-11-28 |
| 1 |
6 |
2021-11-29 |
| 1 |
6 |
2021-11-30 |
【问题讨论】:
标签:
sql
postgresql
date
range
【解决方案1】:
您可以在此处使用日历表方法。创建一个包含所有日期的表,然后加入它。没有实际表格,您可以使用内联 CTE:
WITH dates AS (
SELECT '2021-11-24' AS dt UNION ALL
SELECT '2021-11-25' UNION ALL
SELECT '2021-11-26' UNION ALL
SELECT '2021-11-27' UNION ALL
SELECT '2021-11-28' UNION ALL
SELECT '2021-11-29' UNION ALL
SELECT '2021-11-30'
),
cte AS (
SELECT USER, ROI, DATE, LEAD(DATE) OVER (ORDER BY DATE) AS NEXT_DATE
FROM yourTable
)
SELECT t.USER, t.ROI, d.dt
FROM dates d
INNER JOIN cte t
ON d.dt >= t.DATE AND (d.dt < t.NEXT_DATE OR t.NEXT_DATE IS NULL)
ORDER BY d.dt;