我想转换这些数据
account; docdate; docnum
17700; 9/11/2015; 1
17700; 9/12/2015; 2
70070; 9/1/2015; 4
70070; 9/2/2015; 6
70070; 9/3/2015; 9
进入这个
account; docdate; docnum
17700; 9/12/2015; 2
70070; 9/3/2015; 9
..对于每个帐户,我想拥有一行最新(= max(docdate))docdate。我已经尝试了cross apply
和row_number
的不同方法,但无法达到预期效果
答案 0 :(得分:1)
使用ROW_NUMBER
:
SELCT account, docdate, docnum
FROM (
SELECT account, docdate, docnum,
ROW_NUMBER() OVER (PARTITION BY account
ORDER BY docdate DESC) AS rn
FROM mytable ) AS t
WHERE t.rn = 1
PARTITION BY account
子句创建共享相同account
值的行片。 ORDER BY docdate DESC
将具有最大docdate
值的记录放在其相关切片的顶部。因此rn = 1
指向每个docdate
分区中具有最大account
值的记录。