如何使用前2个关系找到mysql中第二高的成本

时间:2018-03-09 18:15:37

标签: sql sql-server

试图获得第二高的零件成本。

我有什么:

  [PART](
  [PartNbr] [numeric](18, 0) NULL,
  [Description] [varchar](50) NULL,
  [Cost] [numeric](18, 2) NULL,
  [SalesPrice] [numeric](18, 2) NULL

数据:

nodeName()

我试图找回PartNbr和成本第二高的描述。我似乎只能找回成本最低的PartNbr。

2 个答案:

答案 0 :(得分:0)

我认为以下代码会为您提供所需的内容

SELECT partNbr, Description FROM PART a WHERE 2 = (SELECT COUNT(DISTINCT cost) FROM PART b WHERE a.cost<=b.cost)

答案 1 :(得分:0)

ROW_NUMBER()会让这更容易:

SELECT PartNbr, Description
FROM (SELECT PartNbr, 
             Description, 
             ROW_NUMBER() OVER (ORDER BY COST DESC) RN
      FROM Part) P
WHERE RN = 2

这可以通过根据成本分配行号,然后选择成本第二高的行(RN = 2)来实现

另一种方式,更接近你所拥有的,是:

SELECT TOP 1 PartNbr, Description
FROM Part
WHERE Cost IN (SELECT TOP 2 Cost
               FROM Part
               ORDER BY Cost DESC)
ORDER BY Cost ASC

但这对我来说似乎相当混乱。我会坚持使用第一个选项,因为它很容易扩展到其他成本(RN = 18,如果你想要第18个最高成本部分等等。)