我有一个数据表,如:
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
Run Code Online (Sandbox Code Playgroud)
当我按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
Run Code Online (Sandbox Code Playgroud)
现在我需要为每个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,'')
Run Code Online (Sandbox Code Playgroud)
预期产量:
ID USER_GENDER USER_NAME
2 M
1 test11
Run Code Online (Sandbox Code Playgroud)
窗口函数应该能够使用任何最新版本的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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5123 次 |
| 最近记录: |