这将是我的方法:首先,使用dense_rank选择maxprice的所有ZID . 接下来,使用第二个dense_rank来获取所有CID并从所选ZID获得最高成本 . 最后,使用找到的CID来获取Car-data .
这给出了具有最高价格的所有批次中具有最高(相等)成本的所有汽车的CID和ID .
如果你对fat_rank不熟悉,你可以阅读它here
聚集在一个查询中:
SELECT CID
, ID
FROM Cars AS C
INNER JOIN (
SELECT CID
, Cost
, DENSE_RANK() over (ORDER BY Cost DESC) AS orderedCosts
FROM carParking AS CP
INNER JOIN (SELECT ZID
, DENSE_RANK() over (ORDER BY maxprice DESC) AS orderedMaxprice
FROM ParkingArea
) AS PA
ON PA.ZID= CP.ParkingAreaID
AND orderedMaxprice = 1
) as cars_most_costs
ON cars_most_costs.CID = C.CID
AND cars_most_costs.orderedCosts = 1
dense_rank的工作原理如下:
ZID | maxprice| dense_rank
1 | 1000 | 1
3 | 1000 | 1
2 | 500 | 2
4 | 400 | 3
使用您的纸张示例:第一步获得ZID 1和3,它们都具有最高的maxprice . 下一步获得CID 1010和1011,这是停车区ID为1和/或3的最高成本的汽车 . 最后一步返回CID / ID组合的1010/2000和1011/2001 . 您提供的结果实际上是错误的,因为CID 1014的成本为10,而其他两个的成本为20 .
如果你的意思是每个停车区域的最大费用ID,那么问题不是很明确,但你只需要改变一行:
, DENSE_RANK() over (PARTITION BY ZID ORDER BY Cost DESC) AS orderedCosts
这也将返回汽车1014/2004