Справка по SQL-запросам - получение записей на основе столбца MAX - PullRequest
1 голос
/ 02 декабря 2011

Всем, кто может помочь. Я не являюсь экспертом в T-SQL, поэтому я приду сюда за некоторыми рекомендациями. У меня есть таблица в SQL Server 2005, где каждая запись имеет номер редакции. Что мне нужно сделать, это отобразить все записи в таблице только с самым высоким номером ревизии. Я работал над этим некоторое время и пытался использовать MAX () с подзапросами. Я также пробовал оператор HAVING с предложением GROUP BY. Я не должен использовать их правильно.

Стоит отметить, что в этой таблице много столбцов, но я сократил их для этого примера. GROUP BY была проблема из-за различных других столбцов (TEXT, NVARCHAR), которые я должен был поместить в предложение. Это привело к изменению количества моих записей. Вот некоторые примеры данных:

ID | RevisionNumber

0|0

0|1

0|2

1|0

1|1

1|2

1|3

1|4

Вот ожидаемый результат:

ID | RevisionNumber

0|2

1|4

Моя попытка SQL:

SELECT
[ChangeRequests].[F0] AS [ID]
,MAX([ChangeRequests].[F8]) AS [RevisionNumber]
,[ChangeRequests].[F18] AS [ChangeNumber]
,CAST([ChangeRequests].[F19] AS NVARCHAR) AS [Synopsis]
,[ChangeRequests].[F30] AS [Responsibility]
,CAST([ChangeRequests].[F32] AS NVARCHAR) AS [Description]
,(CASE [ChangeRequests].[F42] WHEN 0 THEN NULL ELSE dbo.ConvertSTTimestamp([ChangeRequests].[F42]) END) AS [EnteredOn]
FROM [S37] AS [ChangeRequests]
GROUP BY 
[ChangeRequests].[F0]
,[ChangeRequests].[F18]
,CAST([ChangeRequests].[F19] AS NVARCHAR)
,[ChangeRequests].[F30]
,CAST([ChangeRequests].[F32] AS NVARCHAR)
,[ChangeRequests].[F42]

Это запрос, который не работал.

Большое спасибо заранее за любую помощь!

Ответы [ 2 ]

1 голос
/ 02 декабря 2011
;WITH CTE
     AS (SELECT *,
                ROW_NUMBER() OVER (PARTITION BY ID 
                                       ORDER BY RevisionNumber DESC) AS RN
         FROM   YourTable)
SELECT ID,
       RevisionNumber
       /*Other columns */
FROM   CTE
WHERE  RN = 1  
0 голосов
/ 02 декабря 2011

Теперь агрегатные функции SQL Server поддерживают предложения OVER и PARTITION BY

Попробуйте следующее

select distinct ID, max(RevisionNumber) over (partition by ID)

из SampleTable

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...