注: これは MySQL ではなく Oracle にあり、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の場合)、他のテーブルからチェックイン/チェックアウトを取得するために結合を追加すると機能しません(レコードが返されません)
edit 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