select *
from (
select p.*, v.*,
row_number() over (partition by p.id order by v.userid) as rn
from prmprofile p
join user v on v.profile = p.id
where p.language = 0
and v.userid like '%TEST%'
)
where rn = 1;
select * from(
select *,
row_number() over (partition by v.userid order by v.userid) RNum
from PRMPROFILE p, user v
where
p.id = v.profile
and p.language = 0
and v.userid like '%TEST%'
)x
where RNum=1;
5条答案
按热度按时间bxgwgixi1#
您可以使用分析查询:
内部查询获取所有数据(但使用
*
并不理想),并添加一个额外的列,为每个p.id
值分配一个行号序列。它们必须按某种顺序排列,而且您还没有说明是什么使特定行成为“第一行”,所以我猜是用户ID -当然,您可以将其更改为更合适的值,这样在查询被删除时将提供给予一致的结果。(您可以查看rank
和dense_rank
,以获得选择“第一”行的替代方法)。外部查询只是将结果集限制为额外列的值为
1
的那些结果集,这将为每个p.id
提供给予一行。另一种方法是使用一个子查询来标识“第一”行并连接到该行,但不清楚标准是什么以及是否具有足够的选择性。
ybzsozfc2#
请尝试:
iyfjxgzm3#
vjrehmav4#
可以使用LIMIT关键字。
wr98u20j5#
它将只显示最上面的结果