在sql中某个列条件为真后选择所有记录?

1 sql sql-server-2008

鉴于下表结构

CustomerID | Balance | Date
      1    |  100.00 | 07-09-2016
      1    |  -50.00 | 08-09-2016
      1    |  -60.00 | 09-09-2016
      1    |  500.00 | 10-09-2016
      1    |  600.00 | 11-09-2016
      1    | -100.00 | 12-09-2016
      1    | -200.00 | 13-09-2016
      1    | -400.00 | 14-09-2016
      1    | -500.00 | 15-09-2016
Run Code Online (Sandbox Code Playgroud)

我想从底部开始并选择所有具有负余额的行,并在找到贷方余额后停止。对于上面的示例数据,我希望结果如下

      1    | -100.00 | 12-09-2016
      1    | -200.00 | 13-09-2016
      1    | -400.00 | 14-09-2016
      1    | -500.00 | 15-09-2016
Run Code Online (Sandbox Code Playgroud)

我如何实现这一目标?

谢谢。

jar*_*rlh 5

最简单的方法是使用NO EXISTS. 如果没有其他较晚日期的行具有正余额,则返回一行:

select *
from tablename t1
where not exists (select * from tablename t2
                  where t2.Balance > 0
                    and t2.date > t1.date)
Run Code Online (Sandbox Code Playgroud)

或者,让子查询返回余额 > 0 的最新日期:

select *
from tablename
where date > (select max(date) from tablename where balance > 0)
Run Code Online (Sandbox Code Playgroud)