获得每组的第一行
get first row for each group
我想转换这个数据
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)) 文档日期。我已经用 cross apply
和 row_number
尝试了不同的方法,但无法达到预期的结果
使用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
指向每个 account
分区中具有最大 docdate
值的记录。
我想转换这个数据
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)) 文档日期。我已经用 cross apply
和 row_number
尝试了不同的方法,但无法达到预期的结果
使用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
指向每个 account
分区中具有最大 docdate
值的记录。