2

3列のテーブルがあります

Product        Version        Price
1              1              25
1              2              15
1              3              25
2              1              8
2              2              8
2              3              4
3              1              25
3              2              10
3              3              5

製品ごとの最大価格と最大バージョンを取得したい。したがって、上記の例では、結果は製品 1、バージョン 3、価格 25 になります。製品 2、バージョン 2、価格 8。

これを行う方法を教えてください。

Teradata を使用しています

4

5 に答える 5

1

Teradata SQL を使用すると、これをさらに簡素化できます。

SELECT * FROM atable
QUALIFY
   ROW_NUMBER() 
   OVER (PARTITION BY Product
         ORDER BY Price DESC, Version DESC) = 1;

QUALIFY は、標準 SQL の Teradata 拡張機能です。GROUP BY の HAVING に似ており、ウィンドウ関数の結果をフィルタリングします。

于 2013-09-24T14:59:14.213 に答える
1

Teradata がROW_NUMBER分析機能をサポートしている場合:

SELECT
  Product,
  Version,
  Price
FROM (
  SELECT
    atable.*,  /* or specify column names explicitly as necessary */
    ROW_NUMBER() OVER (PARTITION BY Product
                       ORDER BY Price DESC, Version DESC) AS rn
  FROM atable
) s
WHERE rn = 1
;
于 2013-09-24T13:22:00.573 に答える
0

これを試してください

select p.Product, MAX(p.Price), (select MAX(Version) from Products where Product = p.Product and Price = MAX(p.price))
from Products as p
group by p.Product

返される (製品、価格、バージョン) 1 25 3 , 2 8 2 , 3 25 1

于 2013-09-24T13:36:22.543 に答える