我有一个用于存储数组元素的表,这个元素属于一个框架,每个元素都有一个日期和一个注释(以及其他元素)。像这样:
MASTER_FRAME(K) ARRAY_ID(K) ARRAY_INDX(K) DATE COMMENT
1 1 1 27-08-2010 'List 1 Newer'
1 1 2 27-07-2010 'List 1 Older'
1 2 1 27-08-2010 'List 2 Newer'
1 2 2 27-07-2010 'List 2 Older'
...
master_frame
,array_id
和indx
是表格的主键。我需要获取给定帧的数组列表,每个数组都包含包含最新日期的元素的索引和注释。所以对于这个例子,如果我查询master_frame = 1
我应该得到:
ARRAY_ID DATE COMMENT
1 27-08-2010 'List 1 Newer'
2 27-08-2010 'List 2 Newer'
到目前为止,我可以通过查询获得大部分内容:
SELECT array_id, MAX(date)
FROM my_table
WHERE master_frame = 1
GROUP BY master_frame, array_id
然而,检索comment
(或array_indx
)已经证明比我想象的更难。有可能吗?如果有可能,怎么样?
答案 0 :(得分:1)
假设SQL Server 2005 +
;WITH cte As
(
SELECT array_id, [date], comment,
ROW_NUMBER() OVER (PARTITION BY array_id ORDER BY [date] DESC) AS RN
FROM my_table
WHERE master_frame = 1
)
SELECT array_id, [date], comment
FROM cte
WHERE RN=1;