【问题标题】: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;

【讨论】:

  • 报复投反对票? \:-|
猜你喜欢
  • 1970-01-01
  • 2021-12-29
  • 2021-07-22
  • 1970-01-01
  • 2013-06-28
  • 1970-01-01
  • 1970-01-01
  • 2019-07-19
  • 1970-01-01
相关资源
最近更新 更多