2017-04-13 63 views
0

我有價格和日期的ID列表(不同日期的同一零件編號的多次出現),並希望返回最近的價格日期和第二大最近的價格日期。我希望價格和日期按列分隔,這意味着我只需要一次出現ID。Oracle SQL返回最新和下一個最新的價格和日期

例如(型號和價格都數和PriceDate和價格結束日期以月,日,年格式的日期)

ID Price PriceDate PriceEndDate 
1 5.01 6/2/99 5/1/05 
1 5.50 5/2/05 5/7/10 
1 5.62 5/5/98 6/1/99 
1 4.50 5/8/10 5/10/11 
2 3.50 7/2/86 7/3/86 
2 3.60 6/1/86 7/1/86 
2 3.99 7/4/86 9/9/12 
2 3.10 9/10/12 10/6/15 
3 2.55 5/5/16 5/6/16 
3 2.02 4/5/15 5/4/16 
3 1.50 3/2/14 4/4/15 

我需要查詢返回的

ID Price PriceDate PriceEndDate SecondPrice SecPriceDate SecPriceEndDate 
1 4.50 5/8/10 5/10/11  5.50  5/2/05  5/7/10 
2 3.10 9/10/12 10/6/15  3.99  7/4/86  9/9/12 
3 2.55 5/5/16 5/6/16  2.02  4/5/15  5/4/16 

我已經看到SQL Server和MySQL的問題,但我目前正在使用Oracle SQL。謝謝!!

回答

2

要獲得數據行:

SELECT * 
FROM (
    SELECT t.*, 
     ROW_NUMBER() OVER (PARTITION BY id ORDER BY priceEndDate DESC) AS rn 
    FROM your_table t 
) 
WHERE rn <= 2; 

然後PIVOT的行列,你可以這樣做:

SELECT id, 
     "1_PRICE"   AS Price, 
     "1_PRICESTARTDATE" AS PriceDate, 
     "1_PRICEENDDATE" AS PriceEndDate, 
     "2_PRICE"   AS SecondPrice, 
     "2_PRICESTARTDATE" AS SecPriceDate, 
     "2_PRICEENDDATE" AS SecPriceEndDate, 
FROM (
    SELECT t.*, 
     ROW_NUMBER() OVER (PARTITION BY id ORDER BY priceEndDate DESC) AS rn 
    FROM your_table t 
) 
PIVOT (
    MAX(price) AS price, 
    MAX(priceStartDate) AS priceStartDate, 
    MAX(priceEndDate) AS priceEndDate 
    FOR rn IN (1, 2) 
); 
+0

大這個作品謝謝! – mlin