我有表:Waiter
和WaiterDetail
以及Cafe
。咖啡馆可以有很多服务员和服务员可能有很多服务员详细信息。我想通过他的HiredDate找到第一个雇用服务员的字段CreatedDate最老的WaiterDetail。
Cafe:
*CafeId(primary)
Waiter:
*WaiterId(primary)
*CafeId
*HiredDate
WaiterDetail:
*WaiterDetailID(primary)
*WaiterId
*CreatedDate
如何查询Oracle
和MS SQL Server
?
答案 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;