在 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