给定一个名为budgets
的表,其中包含rate
和time_span
,我希望为每一天生成每月的每日汇率.time_span
必须有开始日期,但可以是开放式的["2023-06-02 00:00:00+00",)
.
例如,给定以下数据集:
-
rate
:$10 -
time_span
:["2023-07-19 00:00:00+00",)
.
假设当前日期为2023-09-05 00:00:00+00
,我预计查询结果将显示:
-
$10
中的2023-07-19 -> 2023-08-18
arate
应该分成30份,每天的房费是$0.333
-
$10
的2023-08-19 -> 2023-09-05
arate
应该分成17天,每天$0.588
英镑.
Attempt 1:个
我首先try 通过从time_span
生成一个序列,然后将利率除以一个月的date_part
间隔来解决这个问题.这是有缺陷的,因为date_part
中的time_bucket
没有在其每月窗口内计算正确的天数.
SELECT
CAST(time_bucket AS TIMESTAMP) AT TIME ZONE 'America/New_York' AS time_bucket,
rate / DATE_PART('days', time_bucket + INTERVAL '1 month - 1 day') AS daily_rate
FROM (
SELECT
DATE(generate_series(LOWER(time_span)::TIMESTAMP, COALESCE(UPPER(time_span),NOW())::TIMESTAMP, '1 day')) AS time_bucket,
rate
FROM budgets
) AS daily_rates;
如何为该预算表生成按月计算的日薪?
-
2023-07-19
-0.333
-
2023-07-20
-0.333
-
2023-07-21
-0.333
- ……
-
2023-08-19
-0.588
-
2023-08-20
-0.588
- ……