在 Snowflake 中使用 last_value() 和 group_by 而不是 window 函数
Use last_value() with group_by instead of as window function in Snowflake
我想在 group by
查询中使用 last_value()
或任何类似函数,而不是作为 window 函数。可能吗?
CREATE TABLE test
(Group_id INT, Fecha DATE, Sales INT)
;
INSERT INTO test (Group_id,Fecha,Sales)
VALUES ( 1, '2021-10-15', 100 ),
( 1, '2021-11-15', 90 ),
( 1, '2022-01-15', 95 ),
( 2, '2021-10-15', 50 ),
( 2, '2021-11-15', 60 ),
( 2, '2022-01-15', 70 )
;
当前解决方案:
select
distinct
group_id,
last_value(sales) over (partition by group_id order by fecha) as last_sales,
max(sales) over (partition by group_id) as max_sales
from test
所需的解决方案:
select
group_id,
max(sales) as max_sales,
last_value(sales) over (order by fecha) as last_sales
from test
group by group_id
有什么方法可以像所需的解决方案那样使用 last_value() 函数吗?
输出应该是:
使用ARRAY_AGG
可以达到类似的效果:
SELECT Group_id,
(ARRAY_AGG(sales) WITHIN GROUP(ORDER BY fecha DESC))[0] AS last_sales,
MAX(Sales) AS max_sales
FROM test
GROUP BY Group_id
ORDER BY Group_id;
输出:
相关:Equivalent for Keep in Snowflake
我想在 group by
查询中使用 last_value()
或任何类似函数,而不是作为 window 函数。可能吗?
CREATE TABLE test
(Group_id INT, Fecha DATE, Sales INT)
;
INSERT INTO test (Group_id,Fecha,Sales)
VALUES ( 1, '2021-10-15', 100 ),
( 1, '2021-11-15', 90 ),
( 1, '2022-01-15', 95 ),
( 2, '2021-10-15', 50 ),
( 2, '2021-11-15', 60 ),
( 2, '2022-01-15', 70 )
;
当前解决方案:
select
distinct
group_id,
last_value(sales) over (partition by group_id order by fecha) as last_sales,
max(sales) over (partition by group_id) as max_sales
from test
所需的解决方案:
select
group_id,
max(sales) as max_sales,
last_value(sales) over (order by fecha) as last_sales
from test
group by group_id
有什么方法可以像所需的解决方案那样使用 last_value() 函数吗?
输出应该是:
使用ARRAY_AGG
可以达到类似的效果:
SELECT Group_id,
(ARRAY_AGG(sales) WITHIN GROUP(ORDER BY fecha DESC))[0] AS last_sales,
MAX(Sales) AS max_sales
FROM test
GROUP BY Group_id
ORDER BY Group_id;
输出:
相关:Equivalent for Keep in Snowflake