SQL:从两个相关表

时间:2017-10-06 14:41:12

标签: sql sql-server oracle subquery rank

我有表:WaiterWaiterDetail以及Cafe。咖啡馆可以有很多服务员和服务员可能有很多服务员详细信息。我想通过他的HiredDate找到第一个雇用服务员的字段CreatedDate最老的WaiterDetail。

Cafe:
     *CafeId(primary)

Waiter:  
     *WaiterId(primary)
     *CafeId
     *HiredDate

WaiterDetail:
     *WaiterDetailID(primary)
     *WaiterId
     *CreatedDate

如何查询OracleMS SQL Server

1 个答案:

答案 0 :(得分: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;