2

我有一个表格,其中包含如下数据:

ID    Field_name   change_date  prev_value  current_value

1      USER_NAME    01/01/2013     test         test11
1      USER_NAME    04/02/2013     test11       test12
2      USER_GENDER  06/01/2013     M             F
2     USER_GENDER   02/01/2013     F             M

当我按 field_name 分组并按 change_date 排序时,我会得到类似

ID    Field_name   change_date  prev_value  current_value
2      USER_GENDER  06/01/2013     M             F
2     USER_GENDER   02/01/2013     F             M 
1      USER_NAME    04/02/2013     test11       test12
1      USER_NAME    01/01/2013     test         test11

现在我需要为每个 field_name 选择前 1 行。请建议

谢谢

编辑:

select @cols = STUFF((SELECT distinct ',' + QUOTENAME(Field_name) 
                            from 
                            (
                                select Field_name,change_date,prev_value,current_value
                                from
                                (select *,
                                 row_number() over (partition by Field_name order by change_date desc) as 
                                ranker from tbl_User
                                )Z
                                where ranker = 1 and ID = '1' 
                            )
                    FOR XML PATH(''), TYPE
                    ).value('.', 'NVARCHAR(MAX)') 
                ,1,1,'')

预期输出:

ID     USER_GENDER  USER_NAME 
2         M            
1                     test11
4

1 回答 1

6

窗口函数应该能够与任何最新版本的 SQL Server 一起使用

select ID, Field_name,  change_date,  prev_value,  current_value
from
(select *,
 row_number() over (partition by Field_name order by change_date desc) as 
ranker from table
)Z
where ranker = 1
于 2013-06-27T18:27:57.003 回答