我正在使用一个看起来像这样的表:
userID, eventDate, eventName
1 2019-01-01 buySoup
2 2019-01-01 buyEggs
2 2019-01-03 buyMilk
2 2019-01-04 buyMilk
3 2019-01-02 buyBread
3 2019-01-03 buyBread
我当前的查询是:
SELECT
userID,
FIRST_VALUE(eventName) OVER (
PARTITION BY userID ORDER BY eventDate ASC
) AS firstBought
FROM table
GROUP BY userID
我觉得这应该返回:
userID, firstBought
1 buySoup
2 buyEggs
3 buyBread
相反,它给出了错误:
'错误:列“table.eventName”必须出现在 GROUP BY 子句中或在聚合函数中使用'
有没有办法获取这个值而不将其包含在按函数分组或创建子查询中?我正在使用 PostgreSQL。
如果我确实将其包含在 group by 子句中,它将返回
userID, firstBought
1 buySoup
2 buyEggs
2 buyEggs
2 buyEggs
3 buyBread
3 buyBread
我知道我可以将其设为子查询,然后按 userID、firstBought 进行分组,但我不想创建另一个子查询。
代替group by
, use select distinct
:
select distinct userID,
FIRST_VALUE(eventName) over (partition by userID order by eventDate ASC) as firstBought
from table ;
或者,您可以使用数组:
select userId,
(array_agg(eventName order by eventDate))[1] as firstBought
from table
group by userId;
Postgres 没有“第一个”聚合函数,但是这个函数运行得很好。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)