对于下面的数据,我需要用最新的修订来获取记录。在下面给出的数据中,我有两个行,分别是Doc# 5和Item# 048以及修订版0和1。我的要求是拿出所有的记录与最大的修订。@nd示例是doc#17,其中有三个修订版,分别为0、1和2,但要求得到最新的修订版2。
Doc#| GO# | Item# |Documentationtype |Revision
1 MNY0005902 064 T-1 DWG 0
2 MNY0005902 59A Transient Study 0
3 MNY0005902 048 Mimic Panel 0
4 MNY0005902 59A Transient Study 0
5 MNY0005902 048 Mimic Pane 0
5 MNY0005902 048 Mimic Panel 1
13 MNY0005902 064 T-1 SUB 0
16 MNY0005902 064 T-1 FIO 0
17 MNY0005902 064 T-1 TR 0
17 MNY0005902 064 T-1 TR 1
17 MNY0005902 064 T-1 TR 2输出应该是
Doc#| GO# | Item# |Documentationtype |Revision
1 MNY0005902 064 T-1 DWG 0
2 MNY0005902 59A Transient Study 0
3 MNY0005902 048 Mimic Panel 0
4 MNY0005902 59A Transient Study 0
5 MNY0005902 048 Mimic Panel 1
13 MNY0005902 064 T-1 SUB 0
16 MNY0005902 064 T-1 FIO 0
17 MNY0005902 064 T-1 TR 2发布于 2018-06-07 05:04:13
这可以很容易地使用ROW_NUMBER()实现。
SELECT *
FROM
(
SELECT *, R = ROW_NUMBER() OVER (PARTITION BY Doc#, Item# ORDER BY Revision DESC)
FROM yourtable
) as D
WHERE R = 1发布于 2018-06-07 05:06:39
您可以使用公共表表达式来减少数据,只获得最新的修订,然后在表上选择并在CTE上进行内部连接。
;WITH rows AS
(
SELECT Doc, MAX(Revision) AS Revision
FROM TheTable
GROUP BY Doc
)
SELECT TheTable.Doc, TheTable.GO, TheTable.Item, TheTable.DocumentationType, TheTable.Revision
FROM TheTable
INNER JOIN rows ON TheTable.Doc = rows.Doc AND TheTable.Revision = rows.Revision在这里工作SQLFiddle,这也应该适用于MSSQL 2008。
发布于 2018-06-07 05:08:03
这个查询应该给出预期的结果。
;WITH CTE as(
select *,row_number()over(partition by doc# order by revision desc) RID
from #docs
)
select doc#,Go#,Item#,DocumentationType,Revision from CTE where RID=1https://stackoverflow.com/questions/50733107
复制相似问题