use*_*835 4 sql postgresql postgresql-9.3
我有三张桌子:
project: project_id, project_namemilestone: milestone_id, milestone_nameproject_milestone: id, project_id, milestone_id, completed_date我希望从project_milestone按照project_id分组获得第二高的completed_date和milestone_id.那就是我想获得每个项目第二高的completed_date里程碑数.对此有什么正确的查询?
我想你可以用project_milestone桌子做你想做的事情row_number():
select pm.*
from (select pm.*,
row_number() over (partition by project_id order by completed_date desc) as seqnum
from project_milestone pm
where pm.completed_date is not null
) pm
where seqnum = 2;
Run Code Online (Sandbox Code Playgroud)
如果您需要包括所有项目,即使没有两个里程碑的项目,您也可以使用left join:
select p.project_id, pm.milestone_id, pm.completed_date
from projects p left join
(select pm.*,
row_number() over (partition by project_id order by completed_date desc) as seqnum
from project_milestone pm
where pm.completed_date is not null
) pm
on p.project_id = pm.project_id and pm.seqnum = 2;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2190 次 |
| 最近记录: |