0

注: これは 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
4

6 に答える 6

3

DENSE_RANK を使用して引き分けにする必要があります

select
   x.name
from
    (
    select
        fans.name,
        dense_rank() over (order by fans.checkout-fans.checkin desc) as rnk
    from
        fans 
    where
        fans.checkout-fans.checkin is not null
    ) x
where
   x.rnk = 1;

SQL Server にはTOP..WITH TIESがありますが、これは DENSE_RANK を持つ RDBMS の一般的なソリューションです。

于 2013-05-09T07:40:24.280 に答える
0

すべての dbm (またはほとんどすべて、少なくともサブクエリをサポートするもの) で機能する別の方法:

select fans.name 
from fans 
where fans.checkout-fans.checkin = 
      ( select max(f.checkout-f.checkin) 
        from fans f
      ) ;
于 2013-05-09T09:20:58.460 に答える
0

両方の列が日付フィールドの場合、次のクエリを使用できます。

select fans.name from fans where fans.checkout-fans.checkin in (select max(fans.checkout-fans.checkin) from fans );

于 2013-05-09T10:06:16.203 に答える
0

オラクルの場合:

select * from 
(
select fans.name
from fans 
where fans.checkout-fans.checkin is not null
order by fans.checkout-fans.checkin desc)
where rownum=1
于 2013-05-09T07:58:51.153 に答える
0

最長はあいまいな言葉です。最初に、自分にとって何が長いかを定義する必要があります。limit を使用しても、この場合の解決策にならない場合があります。したがって、しきい値を定義して、たとえば結果をフィルタリングすることができwhere fans.checkout-fans.checkin > 10ます。

于 2013-05-09T07:29:30.357 に答える
0

これを試して:

select name, (checkout-checkin) AS stay
from fans 
where stay is not null -- remove fans that never stayed at a hotel
order by stay desc;
于 2013-05-09T07:31:48.723 に答える