Требование получить последнюю обновленную запись в SQL - PullRequest
0 голосов
/ 07 июня 2018

Для приведенных ниже данных мне нужно получить записи с последней ревизией.В приведенных ниже данных у меня есть две строки с Doc # 5 с Item # 048 и Revision 0 и 1 соответственно.Мое требование - извлечь все записи с максимальной ревизией.@nd пример - документ № 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

Ответы [ 3 ]

0 голосов
/ 07 июня 2018

Вы можете использовать Общее табличное выражение, чтобы уменьшить данные и получить только самые последние ревизии, затем выбрать в своей таблице и внутреннее объединение в 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.

0 голосов
/ 07 июня 2018

Этот запрос должен дать ожидаемые результаты.

;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=1
0 голосов
/ 07 июня 2018

Этого легко достичь, используя ROW_NUMBER()

SELECT *
FROM
(
    SELECT *, R = ROW_NUMBER() OVER (PARTITION BY Doc#, Item# ORDER BY Revision DESC)
    FROM   yourtable
) as D
WHERE R = 1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...