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