分组 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;
我正在尝试使用最后一个值函数 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;