Sql server 在查询中,从分组依据和订单依据中选择前1名

Sql server 在查询中,从分组依据和订单依据中选择前1名,sql-server,Sql Server,我有一个包含如下数据的表: 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_GENDE

我有一个包含如下数据的表:

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
当我按字段\名称分组,按更改\日期分组时,我会得到如下结果

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
现在我需要为每个字段名称选择前1行。请建议

谢谢

编辑:

预期产出:

ID     USER_GENDER  USER_NAME 
2         M            
1                     test11

对于任何最新版本的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

您的ID列是一个错误,还是确实有多行共享一个ID?根据定义,您已经通过
字段名
进行了
GROUP
ed
By
,因此返回的每一行在
字段名
方面都应该是唯一的。如果您循环查看结果,您将获得每个
字段名称的顶部。不,我将获得所有行,但按HI 1\u CR分组和排序,我已编辑了我的问题…我无法运行该查询..我担心的是我不知道表中有多少字段名称。所以我需要使用pivot以prev_值作为其值来显示预期的表value@user1882705,针对您的旋转要求单独提出一个问题。在这个论坛上有几位举足轻重的专家,不幸的是我不是其中之一。
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