2011-10-27 25 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 

、私が起こるたいのは商品コードでグループ化された最新の価格を取得することです。

結果は次のようにする必要があります:

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

あなたが気付いた場合は基本的にID 5.

の行であるProductIDの12の​​ための新しい価格があるので、最初の行がありませんID、ProductID、Priceのようなものでなければなりません。DateChangedは最新のproductIDでグループ分けされています。

答えて

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

私のソリューションはよりシンプルでより直感的だと思います。 :-)すべてのレコードの中でdatechangedの値が最も高い製品と価格を選択します。 – Raihan

1
SELECT ID, ProductID,DateChanged, Price 
FROM myTable 
WHERE ID IN 
(
    SELECT MAX(ID) 
    FROM myTable 
    GROUP BY ProductID 
) 
関連する問題