Как проверить, есть ли изменения в балансе аккаунта в течение определенного диапазона дат - PullRequest
0 голосов
/ 06 апреля 2020

Я пытаюсь написать псевдо-код SQL, который возвращает логическое значение в зависимости от того, есть ли изменения в балансе, поддерживаемые клиентом в течение какого-либо времени в пределах определенного c диапазона дат, указанного в фильтре отчетов.

Any psuedo code change will

Выше приведен пример моей таблицы счетов teradata. Затем я разбиваю дополнительные таблицы и заполняю факт, который выглядит следующим образом:

enter image description here

Так что, если есть изменение баланса между строками, результат должен быть 1, где как должно быть ноль, если есть ноль, так как баланс не изменился в течение периода времени.

Как я должен go о логике c заполнения столбца Индикатор изменения

Ответы [ 3 ]

2 голосов
/ 06 апреля 2020

Агрегировать и использовать case выражение:

select custid, date,
       (case when min(currentbalance) <> max(currentbalance) then 1 else 0 end)
from t
where date >= @startdate and date < @enddate
group by custid, date;
0 голосов
/ 06 апреля 2020

На основе ваших комментариев и данных нового примера вам понадобится Оконный агрегат :

select ...
  ,case when LAG(current_balance) over (partition by custid order by datecol)
          <> current_balance 
        then 1
        else 0
   end as change_indicator
0 голосов
/ 06 апреля 2020

Вы можете использовать агрегацию:

select custid
from t
where date >= @range1 and date < @range2
group by custid
having min(balance) <> max(balance);

Или, если вы просто хотите флаг для данного клиента и диапазон:

select (case when min(balance) <> max(balance) then 1 else 0 end)
from t
where date >= @range1 and date < @range2 and
      custid = @custid
...