注意:这是在 Oracle 而不是 MySQL,limit/top 不起作用。
我想返回在酒店停留时间最长的人的姓名。最长停留时间可以通过用列减去checkout
列中的日期来找到checkin
。到目前为止,我有:
select fans.name
from fans
where fans.checkout-fans.checkin is not null
order by fans.checkout-fans.checkin desc;
但这只是将每个人的逗留时间从高到低排序。我希望它只返回停留时间最长的人的姓名(或姓名,如果他们并列的话)。此外,由于不止一个人可以停留最长的时间,因此简单地添加limit 1
到末尾是行不通的。
编辑(针对 gbn),当添加一个连接以从其他表中获取签入/签出时,它将不起作用(不返回任何记录)
编辑2现在解决了,下面的连接应该是players.team = teams.name
select
x.name
from
(
select
players.name,
dense_rank() over (order by teams.checkout-teams.checkin desc) as rnk
from
players
join teams
on players.name = teams.name
where
teams.checkout-teams.checkin is not null
) x
where
x.rnk = 1