2011-10-27 56 views
0

下面是一個示例數據庫表:獲取整行從分組結果

| ID | ProductID | DateChanged | Price 
| 1 | 12  | 2011-11-11 | 93 
| 2 | 2   | 2011-11-12 | 12 
| 3 | 3   | 2011-11-13 | 25 
| 4 | 4   | 2011-11-14 | 17 
| 5 | 12  | 2011-11-15 | 97 

基本上,我希望發生的就是最新的價格,按ProductID分組。

結果應該是這樣的:

| ID | ProductID | Price 
| 2 | 2   | 12 
| 3 | 3   | 25 
| 4 | 4   | 17 
| 5 | 12  | 97 

如果你注意到,第一行是不存在的,因爲有對的ProductID 12新的價格是ID的行5

基本上,它應該是類似get ID,ProductID和PriceID的組合,其中DateChanged是最新的。

回答

0
select a.id, a.productid, a.price 
from mytable a, 
    (select productid, max(datechanged) as maxdatechanged 
    from mytable 
    group by productid) as b 
where a.productid = b.productid and a.datechanged = b.maxdatechanged 
+0

非常簡單和不言自明的。感謝您的快速回答。 – xar

2
SELECT ID, ProductId, Price 
FROM 
(
    SELECT ID, ProductId, Price 
     , ROW_NUMBER() OVER (PARTITION BY ProductID ORDER BY DateChanged DESC) AS rowNumber 
    FROM yourTable 
) AS t 
WHERE t.rowNumber = 1 
0
SELECT ID, ProductId, Price 
from myTable A 
where DateChanged >= all 
    (select DateChanged 
    from myTable B 
    where B.ID = A.ID); 
+0

我認爲我的解決方案更簡單,更直觀。 :-)在所有記錄中選擇具有最高datechange值的產品和價格。 – Raihan

1
SELECT ID, ProductID,DateChanged, Price 
FROM myTable 
WHERE ID IN 
(
    SELECT MAX(ID) 
    FROM myTable 
    GROUP BY ProductID 
)