根据日期范围将单行拆分为多行 - Amazon Redshift

问题描述 投票:0回答:1

我需要从代表房间住宿的 Redshift 表中查询数据。多天的住宿将是一行,但我需要将这些住宿分为多行以代表每行一晚,房间收入列按晚数进行分割(也有一个列用于此目的) ).

这是我正在讨论的表和相关字段的示例: enter image description here

这就是我真正想要的结果查询:

enter image description here

sql amazon-redshift
1个回答
0
投票

您可以使用递归来分配每天的收入。

首先将

roomrevenueusd
除以
lengthofstay
,然后递归条件继续追加各个日期,直到达到出发日期。

语法位于 Sql Server 中,您可能需要相应地为 Redshift 更改一些语法,但是 DATEADD 在 Redshift 中应该类似。

示例查询

WITH recursion_room_stay AS (
SELECT stayid, arrivaldate AS staydate,
CAST(roomrevenueusd / lengthofstay AS DECIMAL(10, 2)) AS each_roomrevenueusd,
arrivaldate, departuredate
  
FROM test
  
UNION ALL
  
SELECT  stayid,
DATEADD(day, 1, staydate),
each_roomrevenueusd,arrivaldate,
departuredate
FROM recursion_room_stay
WHERE DATEADD(day, 1, staydate) < departuredate
)
SELECT  stayid,staydate, each_roomrevenueusd
FROM recursion_room_stay
ORDER BY stayid desc, staydate
;

用于输入

停留ID 到达日期 出发日期 停留时间 房间收入美元
3290134 2025-03-26 2025-03-28 2 76.86
2 2025-01-10 2025-01-12 2 100.00

生成

小提琴示例

停留ID 住宿日期 each_roomrevenueusd
3290134 2025-03-26 38.43
3290134 2025-03-27 38.43
2 2025-01-10 50.00
2 2025-01-11 50.00
© www.soinside.com 2019 - 2024. All rights reserved.