选择列中更改值的行

时间:2016-02-29 18:31:48

标签: sql sql-server join

目前我在sql数据库中有这个表,按帐号#。

排序
Account#    Charge_code  PostingDate     Balance
  12345          35      1/18/2016       100
**12345          35      1/20/2016       200**
  12345          61      1/23/2016       250
  12345          61      1/22/2016       300
  12222          41      1/20/2016       200
**12222          41      1/21/2016       250**
  12222          42      1/23/2016       100
  12222          42      1/25/2016       600

如何为每个帐号#的charge_code列中的更改前​​选择最后一行。我突出显示了我想要返回的行。

查询应该快速执行,表中有数万条记录。

1 个答案:

答案 0 :(得分:1)

在SQL Server 2012+中,您将使用lead()

select t.*
from (select t.*,
             lead(charge_code) over (partition by account order by postingdate) as next_charge_code
      from t
     ) t
where charge_code <> next_charge_code;

在早期版本的SQL Server中,您可以使用apply执行类似操作。