Shp*_*tem 1 sql postgresql greatest-n-per-group
我有一张桌子
actions
-------
user_id
action
date
Run Code Online (Sandbox Code Playgroud)
如何仅选择每个用户的第一个操作?
示例数据(操作并不重要,让它 = 0):
预期结果:
小智 5
使用窗口函数(标准 SQL)可以轻松解决这个问题
select user_id,
action,
date
from (
select user_id,
action,
date,
min(date) over (partition by user_id) as min_date
from actions
) t
where date = min_date
order by user_id;
Run Code Online (Sandbox Code Playgroud)
使用窗口函数很可能比表上的自连接更快。
使用 Postgres 的distinct on运算符很可能比使用窗口函数的解决方案更快(但这不能移植到其他 DBMS)。
select distinct on (user_id) user_id, action, date
from actions
order by user_id, date
Run Code Online (Sandbox Code Playgroud)
SQLFiddle: http: //sqlfiddle.com/#!15/ ae67f/6
| 归档时间: |
|
| 查看次数: |
1133 次 |
| 最近记录: |