我需要从代表房间住宿的 Redshift 表中查询数据。多天的住宿将是一行,但我需要将这些住宿分为多行以代表每行一晚,房间收入列按晚数进行分割(也有一个列用于此目的) ).
这就是我真正想要的结果查询:
您可以使用递归来分配每天的收入。
首先将
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 |