假设我的零件表格看起来像这样:
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
我意识到我可以通过GROUP BY PartNumber,Cost来获取不同的记录,但是如何获得最新的记录呢?提前谢谢。
答案 0 :(得分:3)
要获得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
字段应格式化,以使此顺序正确。
答案 1 :(得分:0)
例如,您可以执行如下内联查询:
SELECT DISTINCT
PartNumber,
Cost,
(
SELECT MAX(Revision)
FROM parts t2
WHERE t1.PartNumber = t2.PartNumber
)
FROM parts t1
希望这有帮助!
答案 2 :(得分: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