2011-01-21 51 views
1

原諒我可能是一個可怕的標題;我努力在一行文本中解釋我想要做的事情。根據多個標準選擇前n行

SQL Server 2005中

我有一個表稱爲ItemDataSheets看起來像這樣:

 
Id ItemId FilePath    FileDescription FileType 
------------------------------------------------------------------ 
1 JOD141 /files/JOD141_a.pdf  DataSheet ABC  1 
2 JOD141 /files/JOD141_b.pdf  DataSheet LMN  1 
3 JOD141 /files/JOD141_c.pdf  DataSheet XYZ  2 
4 JOD141 /files/JOD141_d.pdf  DataSheet POI  3 
5 JOD141 /files/JOD141_e.pdf  DataSheet QWE  3 

對於給定的項目Id,我需要返回1行中有每個文件類型。如果它有一個以上的某種文件類型,那麼我需要該文件類型的ID最高的行。因此,對於項目Id JOD141

,我想回:

 
Id ItemId FilePath    FileDescription FileType 
------------------------------------------------------------------ 
2 JOD141 /files/JOD141_b.pdf  DataSheet LMN  1 
3 JOD141 /files/JOD141_c.pdf  DataSheet XYZ  2 
5 JOD141 /files/JOD141_e.pdf  DataSheet QWE  3 

回答

7
SELECT * 
FROM 
    ItemDataSheets i 
    INNER JOIN (SEELECT max(id) id, 
         fileType 
       from ItemDataSheets 
       GROUP BY 
        fileType) maxdID 
    on i.filetype = maxid.filetype 
     and i.id = mqaxid.id 

SELECT 
    *  
FROM (SELECT 
      *, 
      ROW_NUMBER() OVER(partition BY fileType ORDER BY id DESC) AS RankValue 
      FROM ItemDataSheets 
    ) i 
WHERE RankValue=1 
+0

不用擔心,你在第一:) – Blorgbeard 2011-01-21 14:37:16