请原谅我可能是一个糟糕的头衔;我努力用一行文字来解释我想要做的事情。
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
对于给定的ItemId,我需要为它拥有的每个FileType返回1行。如果它有一个以上的某种文件类型,那么我需要该FileType具有最高Id的行。
因此,对于ItemId 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
答案 0 :(得分: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