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

时间:2016-10-17 12:45:38

标签: sql sql-server-2008

给出以下表格结构

Magic

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

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

我如何实现这一目标?

感谢。

1 个答案:

答案 0 :(得分:4)

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

select *
from tablename t1
where not exists (select * from tablename t2
                  where t2.Balance > 0
                    and t2.date > t1.date)

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

select *
from tablename
where date > (select max(date) from tablename where balance > 0)