1

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

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

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

4

3 回答 3

3

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

这是一个查询:

SQLFiddle 演示

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 DESCORDER BY Revision DESC. 但是在这种情况下,您的REVISION字段应该被格式化以使这个顺序正确。

于 2013-08-14T12:18:21.837 回答
0

在子查询中抛出 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
于 2013-08-14T12:20:37.970 回答
0

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

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

SQLFiddle

希望这可以帮助!

于 2013-08-14T12:17:46.110 回答