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
edBy
,因此返回的每一行在字段名
方面都应该是唯一的。如果您循环查看结果,您将获得每个字段名称的顶部。不,我将获得所有行,但按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