使用 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;
如果假设不正确,那么我建议提出一个 新 问题并提供适当的示例数据和期望的结果。
我有一个 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;
如果假设不正确,那么我建议提出一个 新 问题并提供适当的示例数据和期望的结果。