使用 SQL 计算表中的行级

Row level calculation in tables using SQL

我有一个 table 格式:

Account| Sum Paid| Date 
1001   | 100.00  | 1/1/2019
1001   | -100.00 | 2/1/2019
1001   | 100.00  | 5/2/2019
1001   | -100.00 | 9/2/2019

-ve 金额显示已取消的交易。在这里的例子中,有两种取消金额的情况,但在我的数据集中,有很多这样的记录具有不同的时间戳。我希望我的结果集看起来像:

Account| Sum Paid| Date     | Days to cancel
1001   | -100.00 | 2/1/2019 | 1
1001   | -100.00 | 9/2/2019 | 4

有什么办法可以实现吗?我正在使用 Teradata 和 SQL。 我尝试创建两个单独的 tables - 一个有正数,一个有负数,但我无法达到所需的输出。

如有任何帮助,我们将不胜感激。

(我使用普通 SQL 进行查询)

让我假设每个负值前面都有一个正值(中间没有负值)并且日期对于给定帐户是唯一的。这与您的示例数据 100% 一致。

在这种情况下,您可以简单地使用 lag():

select t.*, (date - prev_date) as diff
from (select t.*,
             lag(date) over (partition by account order by date) as prev_date
      from t
     ) t
where sum_paid < 0;

如果假设不正确,那么我建议提出一个 问题并提供适当的示例数据和期望的结果。