Cyb*_*noe 8 sql postgresql vertica
我正在使用一个看起来像这样的表:
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
Run Code Online (Sandbox Code Playgroud)
我当前的查询是:
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
Run Code Online (Sandbox Code Playgroud)
我觉得这应该返回:
userID, firstBought
1 buySoup
2 buyEggs
3 buyBread
Run Code Online (Sandbox Code Playgroud)
相反,它给出了错误:
'错误:列“table.eventName”必须出现在 GROUP BY 子句中或在聚合函数中使用'
有没有办法获取这个值而不将其包含在按函数分组或创建子查询中?我正在使用 PostgreSQL。
如果我确实将其包含在 group by 子句中,它将返回
userID, firstBought
1 buySoup
2 buyEggs
2 buyEggs
2 buyEggs
3 buyBread
3 buyBread
Run Code Online (Sandbox Code Playgroud)
我知道我可以将其设为子查询,然后按 userID、firstBought 进行分组,但我不想创建另一个子查询。
而不是group by
使用select distinct
:
select distinct userID,
FIRST_VALUE(eventName) over (partition by userID order by eventDate ASC) as firstBought
from table ;
Run Code Online (Sandbox Code Playgroud)
或者,您可以使用数组:
select userId,
(array_agg(eventName order by eventDate))[1] as firstBought
from table
group by userId;
Run Code Online (Sandbox Code Playgroud)
Postgres 没有“第一个”聚合函数,但是这个函数运行得很好。