2015-04-01 62 views
0

我需要爲視圖返回一組數據,其中只返回具有最低成本的行。我參加了3張桌子,他們是大桌子(每件作品有2.25億張),所以表演是必不可少的。僅選擇最低成本的行

SELECT RIC.CarrierName, L.LoadGuid, RIC.RateIQCarrierid, RIRD.Cost 
FROM tblLoads L 
INNER JOIN RateIQRecord RIR ON L.LoadGuid = RIR.LoadGuId 
INNER JOIN RateIQCarrier RIC ON RIR.RateIQRecordID = RIC.RateIQRecordID 
INNER JOIN RateIQRateDetail RIRD ON RIC.RateIQRecordID = RIRD.RateIQRecordID 
AND CAST(L.CreatedDate AS Datetime) Between '03/3/2014' and '03/3/2014 23:59:59.997' 

這是基於代碼的上述

CarrierName  LoadGuid      Carrierid Cost 
Carrier a   FF98010A-90CE-4541-AB88-683645352712 210677951 192.51 
Carrier a   FF98010A-90CE-4541-AB88-683645352712 210677921 153.17 
Carrier b   FF98010A-90CE-4541-AB88-683645352712 210677925 196.28 
Carrier b   FF98010A-90CE-4541-AB88-683645352712 210677947 280.65 
Carrier b   FF98010A-90CE-4541-AB88-683645352712 210677949 241.71 

這裏的數據集的一個例子是我所需要的:

CarrierName  LoadGuid       Carrierid Cost 
Carrier a   FF98010A-90CE-4541-AB88-683645352712 210677921  153.17 
Carrier b   FF98010A-90CE-4541-AB88-683645352712 210677925  196.28 
+0

tblLoads.CreatedDate的數據類型是什麼? – 2015-04-02 09:02:04

+0

@abatishchev,這是日期時間 – user4462287 2015-04-02 12:25:12

回答

0

嘗試了這一點: 注:我假設你有SQL Server 2008或更高版本。 ROW_NUMBER()贏了;否則工作。

SELECT * 
FROM 
(
    SELECT RIC.CarrierName, 
      L.LoadGuid, 
      RIC.RateIQCarrierid, 
      RIRD.Cost, 
      --Partition says look at each carrier as a group, then number them in order of cost lowest to highest. 
      ROW_NUMBER() OVER (PARTITION BY RIC.CarrierName ORDER BY Cost) rank_num 
    FROM tblLoads L 
    INNER JOIN RateIQRecord RIR 
       ON L.LoadGuid = RIR.LoadGuId 
    INNER JOIN RateIQCarrier RIC 
       ON RIR.RateIQRecordID = RIC.RateIQRecordID 
    INNER JOIN RateIQRateDetail RIRD 
       ON RIC.RateIQRecordID = RIRD.RateIQRecordID 

       --Don't do it this way 
       --AND CAST(L.CreatedDate AS Datetime) Between '03/3/2014' and '03/3/2014 23:59:59.997' 

       --Try this instead 
       AND CAST(L.CreatedDate AS DATE) = '03/03/2014' 
) A 
--Only grab the lowest number aka first of row number 
WHERE A.rank_num = 1 
+1

是完美!感謝日期約束的提示。 – user4462287 2015-04-02 13:46:56