任何人都可以提供幫助。我不是T-SQL的專家,所以我來這裏尋求一些指導。我有一個SQL Server 2005中的表,每個記錄都有一個修訂版本號。我需要做的是隻顯示最高版本號的表中的所有記錄。我一直在研究這一段時間,並嘗試使用MAX()和子查詢。我也嘗試了帶GROUP BY子句的HAVING語句。我不能正確使用這些。SQL查詢幫助 - 基於MAX列獲取記錄
值得注意的是,我在這個表格中有很多列,但是我在這個例子中刪除了很多列。 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]
這是一個沒有工作的查詢。
非常感謝您的幫助!
我想這一點: ;具有CTE AS(SELECT *, ROW_NUMBER()OVER(PARTITION BY [ChangeRequests]。[F0][ChangeRequests]。[F0] AS [ID], [ChangeRequests]。[F8] AS [RevisionNumber]。[ChangeRequests]。[F8] DESC)AS RN FROM [S37] AS [ChangeRequests]) SELECT [ChangeRequests] /*其他列*/ FROM CTE WHERE RN = 1 我得到這個回: 多部分標識符 「ChangeRequests.F0」 無法綁定。 無法綁定多部分標識符「ChangeRequests.F8」。 – Jared
@ user993514您需要將查詢的末尾改爲'SELECT [CTE]。[F0] AS [ID],[CTE]。[F8] AS [RevisionNumber]/*其他列*/FROM CTE WHERE RN = 1'。在公共表格表達式之外不能訪問表格[ChangeRequests]。 –
謝謝,工作很棒! – Jared