获取属性与聚合函数的结果相关联

时间:2010-09-16 10:01:12

标签: sql sql-server

我有一个用于存储数组元素的表,这个元素属于一个框架,每个元素都有一个日期和一个注释(以及其他元素)。像这样:

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_framearray_idindx是表格的主键。我需要获取给定帧的数组列表,每个数组都包含包含最新日期的元素的索引和注释。所以对于这个例子,如果我查询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)已经证明比我想象的更难。有可能吗?如果有可能,怎么样?

1 个答案:

答案 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;