在 Snowflake 中将 last_value() 与 group_by 一起使用,而不是作为窗口函数

alv*_*opr 5 group-by snowflake-cloud-data-platform

我想last_value()在查询中使用 或任何类似的函数group by而不是作为窗口函数。有可能吗?

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 )
;
Run Code Online (Sandbox Code Playgroud)

目前的解决方案:

 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
Run Code Online (Sandbox Code Playgroud)

所需的解决方案:

  select
      group_id, 
      max(sales) as max_sales,
      last_value(sales) over (order by fecha) as last_sales
  from test
  group by group_id
Run Code Online (Sandbox Code Playgroud)

有什么方法可以在所需的解决方案中使用 last_value() 函数吗?

输出应该是:

在此输入图像描述

Luk*_*zda 6

使用以下方法可以达到类似的效果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;
Run Code Online (Sandbox Code Playgroud)

输出:

在此输入图像描述

相关:相当于保留在雪花中