SQL: select 来自两个相关表的最大值
SQL: select max values from two related tables
我有表格:Waiter
和 WaiterDetail
以及 Cafe
。 Cafe 可以有很多 Waiter,而 Waiter 可能有很多 WaiterDetails。我想按字段 CreatedDate 查找最旧的 WaiterDetail,这是第一个雇用 Waiter 的 HiredDate。
Cafe:
*CafeId(primary)
Waiter:
*WaiterId(primary)
*CafeId
*HiredDate
WaiterDetail:
*WaiterDetailID(primary)
*WaiterId
*CreatedDate
Oracle
和 MS SQL Server
的查询看起来如何?
如果我没记错的话,您希望:对于每个咖啡馆,找到第一个(最早)HiredDate
的服务员,并且对于那个服务员,找到最老(最早)CreatedDate
的详细信息.所以,对于 Oracle(可能还有 SQL 服务器),像这样:
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;
我有表格:Waiter
和 WaiterDetail
以及 Cafe
。 Cafe 可以有很多 Waiter,而 Waiter 可能有很多 WaiterDetails。我想按字段 CreatedDate 查找最旧的 WaiterDetail,这是第一个雇用 Waiter 的 HiredDate。
Cafe:
*CafeId(primary)
Waiter:
*WaiterId(primary)
*CafeId
*HiredDate
WaiterDetail:
*WaiterDetailID(primary)
*WaiterId
*CreatedDate
Oracle
和 MS SQL Server
的查询看起来如何?
如果我没记错的话,您希望:对于每个咖啡馆,找到第一个(最早)HiredDate
的服务员,并且对于那个服务员,找到最老(最早)CreatedDate
的详细信息.所以,对于 Oracle(可能还有 SQL 服务器),像这样:
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;