2017-10-06 24 views
-2

私はテーブル:WaiterWaiterDetailCafeを持っています。カフェには多くのウェイターがあり、ウェイターには多くのウェイター詳細があります。彼のHiredDateが最初に雇ったウェイターのCreatedDateフィールドで最も古いWaiterDetailを探しています。SQL:2つの関連テーブルから最大値を選択

Cafe: 
    *CafeId(primary) 

Waiter: 
    *WaiterId(primary) 
    *CafeId 
    *HiredDate 

WaiterDetail: 
    *WaiterDetailID(primary) 
    *WaiterId 
    *CreatedDate 

方法OracleMS SQL Serverのクエリのように見えるのだろうか?

+6

は宿題のようですか? – Squirrel

+0

サンプルデータと予想される結果をご提供ください。 – GSazheniuk

+3

なぜあなたはsql-serverとoracleを同時に必要としますか? – Tanner

答えて

1

もし私が正しいとしたら、それぞれのカフェで最初の(最も早い)ウェイトを見つけるために、HiredDateとそのウェイターのために最も古い(最も早い)CreatedDateの詳細を見つけます。ですから、Oracle(とSQL Server)の場合は、次のようになります。

SELECT * 
FROM (
    SELECT w.*, 
     d.*, 
     ROW_NUMBER() OVER (PARTITION BY CafeID 
          ORDER BY w.HiredDate ASC, 
             d.CreatedDate ASC) AS rn 
    FROM Waiter w 
     INNER JOIN WaiterDetail d 
     ON (w.WaiterId = d.WaiterId) 
) 
WHERE rn = 1; 
関連する問題