2017-10-06 22 views
-2

J'ai des tables: Waiter et WaiterDetail et Cafe. Le café peut avoir beaucoup de serveurs et le serveur peut avoir beaucoup de détails de serveur. Je voudrais trouver le plus ancien WaiterDetail par le champ CreatedDate, du premier Waiter par son HiredDate.SQL: sélectionnez les valeurs maximales de deux tables connexes

Cafe: 
    *CafeId(primary) 

Waiter: 
    *WaiterId(primary) 
    *CafeId 
    *HiredDate 

WaiterDetail: 
    *WaiterDetailID(primary) 
    *WaiterId 
    *CreatedDate 

Comment ressemblera requête pour Oracle et MS SQL Server?

+6

ressemble à des devoirs? – Squirrel

+0

Veuillez fournir des exemples de données et le résultat attendu. – GSazheniuk

+3

pourquoi le voudriez-vous pour sql-server et oracle en même temps? – Tanner

Répondre

1

Si je l'ai correct, vous voulez: pour chaque café pour trouver le serveur avec le premier (le plus tôt) HiredDate et, pour ce serveur, trouver le détail avec le plus ancien (le plus ancien) CreatedDate. Donc, pour Oracle (et peut-être SQL Server), quelque chose comme ça:

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;