【发布时间】:2020-12-27 15:18:29
【问题描述】:
我正在尝试将 PostgreSQL sql 中的以下语法转换为雪花。转换为雪花后,它会抛出在 groupby 子句中添加快照的错误
PostgreSQL 查询
select row_number()
over (
order by snapshot_date ) AS month_no,
*
from (
SELECT
date_trunc('month', snapshot_date) :: date AS month_date,
MIN(snapshot_date) AS month_start,
MAX(snapshot_date) AS month_end,
MAX(snapshot_date) as snapshot_date,
(date_trunc('month', snapshot_date) + INTERVAL '1 month - 1 day') :: DATE as eow,
lag(MAX(snapshot_date), 1)
over (
order by
date_trunc('month', snapshot_date) :: date ) as prev_month_end
FROM sample.sample
WHERE snapshot_date >= ('2020-10-10')
and snapshot_date < date_trunc('week', current_date)
GROUP BY date_trunc('month', snapshot_date),
EXTRACT(month FROM snapshot_date)
ORDER BY 3 DESC
)a where month_end>('2020-10-10');
上面的查询返回3条记录
我正在使用下面的雪花查询。在执行时它要求添加快照日期,如果我添加它,它会在快照日期进行分组并返回 31 条记录。 所以简而言之,我不想按快照日期分组,因为它应该只按月份开始和月份数分组。
雪花查询
select row_number()
over (
order by snapshot_date ) AS month_no,
*
from (
SELECT
date_trunc('month', snapshot_date :: date) AS month_date,
MIN(snapshot_date) AS month_start,
MAX(snapshot_date) AS month_end,
MAX(snapshot_date) as snapshot_date,
last_day(snapshot_date) as eow,
lag(MAX(snapshot_date), 1)
over (
order by
date_trunc('month', snapshot_date :: date) ) as prev_month_end
FROM fincor.fx_rate
WHERE snapshot_date >= ('2020-10-10')
and snapshot_date < date_trunc('week', current_date)
GROUP BY date_trunc('month', snapshot_date),
EXTRACT(month FROM snapshot_date)
ORDER BY 3 DESC
)a where month_end>('2020-10-10');
错误
【问题讨论】:
-
尝试将
MAX(snapshot_date)输出重命名为snapshot_date 以外的名称。我认为您在查询中引用多个具有相同名称的列可能会感到困惑。为什么你要按同一件事分组两次?最后,我很惊讶它没有抱怨子查询中的ORDER BY语句。 -
我更新了查询但仍然有同样的问题。如果您可以分享您的更新查询版本,那将非常有帮助。
-
@MikeWalton,您能否分享您所指的更新查询版本?
标签: sql postgresql group-by snowflake-cloud-data-platform