获得每组的第一行

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 applyrow_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 值的记录。