【问题标题】:TSQL Selecting Highest RowNumber record with distinct field value?SQL选择具有不同字段值的Highest Row_Number记录?
【发布时间】:2013-08-14 23:51:28
【问题描述】:

假设我有一张桌子,看起来像这样:

PartNumber | Cost | Revision
aaaaa | 10 | Rev1
xxxxx | 12 | Rev1
aaaaa | 10 | Rev2
ccccc | 37 | Rev1
ttttt | 23 | PreRelease
sssss | 19 | Rev7
ttttt | 11 | Rev0

我想以某种方式获得最新版本的不同零件编号/成本记录。我知道最新版本将始终是给定零件表中的最后一个条目。例如,在这里,“aaaaa”的最新版本是“Rev2”,它是表中与该部件号匹配的最后一条记录。如果输入新的转速,它将在最后出现。这就是我想要的结果。

PartNumber | Cost | Revision
xxxxx | 12 | Rev1
aaaaa | 10 | Rev2
ccccc | 37 | Rev1
sssss | 19 | Rev7
ttttt | 11 | Rev0

我意识到我可以按零件编号、成本分组来获得不同的记录,但我如何获得最新的转速?提前致谢。

【问题讨论】:

    标签: tsql


    【解决方案1】:

    要获得 LAST ENTERED 行,您至少需要此表中的主键 ID 字段:

    这是一个查询:

    SQLFiddle demo

    SELECT PartNumber,Cost,Revision 
    FROM
    (SELECT PartNumber,Cost,Revision,
           ROW_NUMBER() OVER (PARTITION BY PartNumber ORDER BY ID DESC) as rn
           FROM T
    ) AS T1
    WHERE RN=1
    

    如果您没有 ID 字段,请尝试将 ORDER BY ID DESC 替换为 ORDER BY Revision DESC。但在这种情况下,您的 REVISION 字段应该被格式化以使这个顺序正确。

    【讨论】:

      【解决方案2】:

      在子查询中抛出 Group By 查询,然后从那里获取使其不同的记录,没有主键,然后从那里获取最大主键。

      看起来像这样,我会努力将其转换为您的数据...

      Select Max(p2.PersonID), p2.FirstName
      From core.Person p2
      Where Exists
      (
          Select p.FirstName, Count(1)
          From core.Person p
          Where p.FirstName = p2.FirstName
          Group By p.FirstName
      )
      Group By p2.FirstName
      

      【讨论】:

        【解决方案3】:

        例如,您可以像这样进行内联查询:

        SELECT DISTINCT 
        PartNumber, 
        Cost, 
        (
             SELECT MAX(Revision) 
             FROM parts t2 
             WHERE t1.PartNumber = t2.PartNumber
        )
        FROM parts t1
        

        SQLFiddle

        希望这会有所帮助!

        【讨论】:

        • 现在可以了,抱歉。还添加了小提琴。我把桌子叫做零件。
        猜你喜欢
        • 2020-12-19
        • 2019-01-28
        • 1970-01-01
        • 2023-01-09
        • 1970-01-01
        • 1970-01-01
        • 2013-12-01
        • 2021-03-22
        • 1970-01-01
        相关资源
        最近更新 更多