2013-06-04 84 views
2

我有一個包含文檔ID列和日期列的視圖以及與此問題無關的其他一列。可以有多個具有相同文檔ID的行,但日期通常不同。這表示它是同一個文件,只是對它的修訂。問題是,如果我有兩行文檔ID和日期相同,我都會得到。我只想得到一個。無論哪一個,只要我只有一個。如果值相同,SQL Max會返回重複項

以下內容在文檔ID和日期相同的情況下是重複的。

SELECT FSD.* 
FROM vFSD FSD 
INNER JOIN 
    (
    SELECT InternalID, MAX(FileLastUploadedDate) AS FileLastUploadedDate 
    FROM vFSD 
    GROUP BY InternalID 
    ) gFSD ON FSD.InternalID = gFSD.InternalID AND FSD.FileLastUploadedDate = gFSD.FileLastUploadedDate 

我也試過用DISTINCT,但它沒有解決問題。

SELECT DISTINCT FSD.* 
FROM vFSD FSD 
INNER JOIN 
    (
    SELECT DISTINCT InternalID, MAX(FileLastUploadedDate) AS FileLastUploadedDate 
    FROM vFSD 
    GROUP BY InternalID 
    ) gFSD ON FSD.InternalID = gFSD.InternalID AND FSD.FileLastUploadedDate = gFSD.FileLastUploadedDate 
+0

SELECT TOP 1等 –

+0

事件看起來像內部的選擇將成爲你想要的行,然後你加入獲得更多的行。 – Randy

+0

注意:重複的*必須*從JOIN引入FSD(讀取,必須在* FSD中重複*)作爲子選擇*不能*由於在GROUP BY中的參與而包含重複的內部Id記錄。 (並且DISTINCT完全沒有效果。) – user2246674

回答

4

您可以使用ROW_NUMBER只帶回一個任意行中有兩個使用相同的最大FileLastUploadedDate並列的InternalID

WITH CTE 
    AS (SELECT *, 
       ROW_NUMBER() OVER (PARTITION BY InternalID 
             ORDER BY FileLastUploadedDate DESC) AS RN 
     FROM vFSD) 
SELECT InternalID, 
     FileLastUploadedDate 
     /*Other desired columns*/ 
FROM CTE 
WHERE RN = 1 
+1

首先到達那裏! –