本文介绍了PostgreSQL:根据排序顺序仅选择每个ID的第一条记录的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
对于下面的查询,我只需要选择Shape_Type值最小的第一条记录(范围从1到10)。如果你有任何关于如何在PostgreSQL中轻松做到这一点的知识,请帮助。耽误您时间,实在对不起。select g.geo_id, gs.shape_type
from schema.geo g
join schema.geo_shape gs on (g.geo_id=gs.geo_id)
order by gs.shape_type asc;
推荐答案
PostgreSQL为此类查询提供了非常好的语法-distinct on:
因此您的查询变为:
select distinct on(g.geo_id)
g.geo_id, gs.shape_type
from schema.geo g
join schema.geo_shape gs on (g.geo_id=gs.geo_id)
order by g.geo_id, gs.shape_type asc;
通常(在任何具有窗口函数和公用表表达式的RDBMS中,可以切换为子查询)的ANSI-SQL语法为:
with cte as (
select
row_number() over(partition by g.geo_id order by gs.shape_type) as rn,
g.geo_id, gs.shape_type
from schema.geo g
join schema.geo_shape gs on (g.geo_id=gs.geo_id)
)
select
geo_id, shape_type
from cte
where rn = 1
这篇关于PostgreSQL:根据排序顺序仅选择每个ID的第一条记录的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!