Sql 基于单列返回不同记录的问题(Oracle)
如果我有表“members”(如下所示),我将如何获取成员身份(Oracle)第一次出现的记录 预期结果Sql 基于单列返回不同记录的问题(Oracle),sql,oracle,Sql,Oracle,如果我有表“members”(如下所示),我将如何获取成员身份(Oracle)第一次出现的记录 预期结果 123 John Doe A P 313 Michael Casey A A 113 Luke
123 John Doe A P
313 Michael Casey A A
113 Luke Skywalker A P
membership_id first_name last_name status type
123 John Doe A P
313 Michael Casey A A
113 Luke Skywalker A P
123 Bob Dole A A
313 Lucas Smith A A
表格-成员
123 John Doe A P
313 Michael Casey A A
113 Luke Skywalker A P
membership_id first_name last_name status type
123 John Doe A P
313 Michael Casey A A
113 Luke Skywalker A P
123 Bob Dole A A
313 Lucas Smith A A
希望有帮助
SELECT membership_id,
first_name,
last_name,
status,
type
FROM( SELECT membership_id,
first_name,
last_name,
status,
type,
rank() over (partition by membership_id
order by type desc) rnk
FROM members )
WHERE rnk = 1
希望有帮助
SELECT membership_id,
first_name,
last_name,
status,
type
FROM( SELECT membership_id,
first_name,
last_name,
status,
type,
rank() over (partition by membership_id
order by type desc) rnk
FROM members )
WHERE rnk = 1
将适用于您的示例数据集。如果您可以有关系,即多行具有相同的成员身份\u id
和相同的最大类型
,则此查询将返回所有这些行。如果您只想返回有平局的行中的一行,则需要向顺序添加额外的条件,以确保所有平局均已中断,或者需要使用行号功能,而不是将任意中断平局的排名
select *
from members
where rowid in (
select min(rowid)
from members
group by membership_id
)
将适用于您的示例数据集。如果您可以有关系,即多行具有相同的
成员身份\u id
和相同的最大类型
,则此查询将返回所有这些行。如果只想返回有平局的一行,您可能需要向“排序依据”添加额外的条件,以确保所有的关联都已断开,或者您需要使用行数
函数,而不是将任意断开关联的秩
。由于表中的行本质上是无序的,那么确定“优先”的逻辑是什么?为了确定“第一”行,我们可以按什么列排序?在您的示例中,看起来我们可以按姓氏
订购,但我不确定这通常是否正确。订购顺序是根据会员身份id和“类型”(desc)确定的。我的例子显然是按这个顺序排列的,但这并不能消除我所面临的问题。我的程序中的数据实际上不是一个表,而是一个已经存在的查询的结果。既然表中的行本质上是无序的,那么确定“优先”的逻辑是什么?为了确定“第一”行,我们可以按什么列排序?在您的示例中,看起来我们可以按姓氏
订购,但我不确定这通常是否正确。订购顺序是根据会员身份id和“类型”(desc)确定的。我的例子显然是按这个顺序排列的,但这并不能消除我所面临的问题。我的程序中的数据实际上不是表,而是已有查询的结果。首先
?据我所知,这不是一个Oracle函数。你是说max
还是min
,它会选择任意组合(可能不是OP想要的?是的,你说的对,我没有Oracle方面的经验,所以我只是想指出一条可能的路径。关于max/min,问题是“获取成员id(Oracle)首次出现的记录”因此,我认为获得第一次出现是目标,但我可能误解了。第一次
?据我所知,这不是Oracle函数。您是指将选择任意组合的max
还是min
(可能不是OP想要的?是的,你说的对,我没有Oracle方面的经验,所以我只是想指出一条可能的路径。关于最大/最小值,问题是“获取成员id(Oracle)首次出现的记录”,所以我假设获得第一次出现是目标,但我可能误解了。
select *
from members
where rowid in (
select min(rowid)
from members
group by membership_id
)