分组 Netezza 查询中的最后一个值函数

Last value function in a grouped Netezza query

我正在尝试使用最后一个值函数 return 最后一个字段,按日期排序,满足某些条件。但是,Netezza 一直告诉我,我试图在最后一个值函数中排序的字段需要分组。我认为问题在于我正在尝试将 Last Value 与其他一些聚合函数一起使用,但我不知道解决方案。

假设我有这个数据:

CustomerID    Type          Product      Dollars      Date
1             Widget1       Gadget1      100          2016-09-01
1             Widget2       Gadget2      100          2016-09-02
1             Widget1       Gadget3      100          2016-09-03
1             Widget2       Gadget2      100          2016-09-04
2             Widget2       Gadget2      100          2016-09-01

我想return这个结果集:

CustomerID    SumOfDollars  LastWidget1
1             400           Gadget3
2             100           NULL

我使用的查询是:

SELECT
    CustomerID
    ,SUM(Dollars) AS SumOfDollars
    ,LAST_VALUE(CASE WHEN Type = 'Widget1' THEN Product ELSE NULL END IGNORE NULLS)
      OVER (ORDER BY Date DESC) AS LastWidget1
FROM Table
GROUP BY CustomerID

当我 运行 这个查询时,Netezza 告诉我 Date 必须分组(或类似的东西)。谁能帮我解决这个问题?

LAST_VALUE()是解析函数,不是聚合函数。您可以使用子查询执行此操作:

SELECT CustomerID, SUM(Dollars) AS SumOfDollars,
       MAX(LastWidget1) as LastWidget1
FROM (SELECT t.*,
             LAST_VALUE(CASE WHEN Type = 'Widget1' THEN Product ELSE NULL END IGNORE NULLS)
                 OVER (PARTITION BY CustomerID ORDER BY Date DESC) AS LastWidget1
      FROM Table t
     ) t
GROUP BY CustomerID;