Расчет уровня строк в таблицах с использованием SQL - PullRequest
0 голосов
/ 27 сентября 2019

У меня есть таблица в формате:

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.Я попытался создать две отдельные таблицы - одну с положительными суммами, а другую с отрицательными, но я не могу достичь желаемого результата.

Любая помощь будет оценена.

(я использую простой SQL для запросов)

1 Ответ

2 голосов
/ 27 сентября 2019

Позвольте мне предположить, что каждому отрицательному значению предшествует положительное значение (без промежуточных отрицательных значений) и что даты являются уникальными для данного аккаунта.Это на 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;

Если предположения неверны, то я бы порекомендовал спросить новый вопрос и предоставление соответствующих образцов данных и желаемых результатов.

...