上一年至今 Window Trino 函数 (PrestoSQL)
Prior Year to Date Window Function for Trino (PrestoSQL)
我试图弄清楚如何仅使用一个 window 函数来获取“前一年至今”时间段内指标的总和和平均值,因为我有很多 window 功能,并希望让我的代码尽可能简单。我不知道其他人是否会觉得这有用,但在这里展示我自己的解决方案以防它有用。
去年至今、之前的 ytd、最后的 ytd 等(公司使用的不同术语)
我是 运行 EMR 上的 PrestoSQL (Trino) 版本 350.0。这只有在 346 版和我认为的更高版本中才有可能。在撰写本文时,这不适用于 PrestoDB。
select
avg(your_metric)
over (
partition by your_partition_columns
order by (to_unixtime(your_date)/86400)
range between
((to_unixtime(your_date)/86400) - (to_unixtime(last_day_of_month(date_trunc('year',date_add('year',-1,your_date))))/86400))
preceding
and
((to_unixtime(your_date)/86400) - (to_unixtime(last_day_of_month(date_add('year',-1,your_date)))/86400))
preceding
)
as your_metric_avg_prior_year_to_date
from your_table
我相信这就是你想要的:
SELECT
sum(metric) OVER prior_year_to_date,
avg(metric) OVER prior_year_to_date
FROM orders
WINDOW prior_year_to_date AS (
ORDER by your_date
RANGE BETWEEN
your_date - date_trunc('year', your_date - interval '1' year) PRECEDING AND
interval '1' year PRECEDING
)
一些观察:
- 您可以使用
WINDOW
子句定义 window 一次并在多个函数中重用它。
RANGE
window 框架可以直接对日期时间类型进行操作。在这种情况下,范围定义为从当前行 your_date
前 N 天开始的间隔(其中 N 是将该日期偏移到上一年年初所需的天数)和 1 年前当前行的 your_date
。
您可以在 Trino here.
中找到有关 WINDOW
和 RANGE
用法的更多详细信息
我试图弄清楚如何仅使用一个 window 函数来获取“前一年至今”时间段内指标的总和和平均值,因为我有很多 window 功能,并希望让我的代码尽可能简单。我不知道其他人是否会觉得这有用,但在这里展示我自己的解决方案以防它有用。
去年至今、之前的 ytd、最后的 ytd 等(公司使用的不同术语)
我是 运行 EMR 上的 PrestoSQL (Trino) 版本 350.0。这只有在 346 版和我认为的更高版本中才有可能。在撰写本文时,这不适用于 PrestoDB。
select
avg(your_metric)
over (
partition by your_partition_columns
order by (to_unixtime(your_date)/86400)
range between
((to_unixtime(your_date)/86400) - (to_unixtime(last_day_of_month(date_trunc('year',date_add('year',-1,your_date))))/86400))
preceding
and
((to_unixtime(your_date)/86400) - (to_unixtime(last_day_of_month(date_add('year',-1,your_date)))/86400))
preceding
)
as your_metric_avg_prior_year_to_date
from your_table
我相信这就是你想要的:
SELECT
sum(metric) OVER prior_year_to_date,
avg(metric) OVER prior_year_to_date
FROM orders
WINDOW prior_year_to_date AS (
ORDER by your_date
RANGE BETWEEN
your_date - date_trunc('year', your_date - interval '1' year) PRECEDING AND
interval '1' year PRECEDING
)
一些观察:
- 您可以使用
WINDOW
子句定义 window 一次并在多个函数中重用它。 RANGE
window 框架可以直接对日期时间类型进行操作。在这种情况下,范围定义为从当前行your_date
前 N 天开始的间隔(其中 N 是将该日期偏移到上一年年初所需的天数)和 1 年前当前行的your_date
。
您可以在 Trino here.
中找到有关WINDOW
和 RANGE
用法的更多详细信息