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

时间:2016-09-12 01:33:43

标签: function tsql netezza

我试图使用Last Value函数返回符合某些条件的按日期排序的最后一个字段。然而,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

我想返回此结果集:

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进行分组(或沿着这些行进行分组)。任何人都可以帮我解决这个问题吗?

1 个答案:

答案 0 :(得分:1)

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;