2

我有一个三列的表

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 支持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 回答
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 回答
0
SELECT product
     , max(version) as version 
     , max(price) as price
  FROM mytable
 GROUP BY product
于 2013-09-24T13:09:08.057 回答
0

以下代码将选择产品、版本的最高值、价格的最高值,并将使用产品排序GROUP BY

SELECT [product], MAX([version]) as [MaxVersion], MAX([price]) as [MaxPrice]
FROM [NameOfTable]
GROUP BY [product]

关于函数的更多解释MaxMax function SQL

于 2013-09-24T13:13:55.390 回答
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 回答