Исключать строки, пока значение из столбца не изменилось - PullRequest
2 голосов
/ 02 октября 2019

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

 select hca.account_name "Account Name",
           hca.account_number "Account Number",
           rt.name "Payment Term",
           rt.description "Description",
           trunc (apsa.creation_date) "Creation Date",
    from ra_terms rt,
         hz_cust_accounts hca,
         ar_payment_schedules_all apsa
    where apsa.class = 'INV'
          and apsa.invoice_currency_code = 'USD'
          and apsa.customer_id = hca.cust_account_id (+)
          and apsa.term_id = rt.term_id
          and hca.account_number = 99820
    group by apsa.creation_date,
             rt.name,
             rt.description,
             hca.account_name,
             hca.account_number,
             apsa.trx_number
    order by hca.account_number DESC,
             "Creation Date" ASC

Текущий вывод:

|  Account Name   | Account Number | Payment Term | Creation Date | <br/>

| ABC Corporation |          99820 | PDC 50-0     | 1/16/2017     |<br/>
| ABC Corporation |          99820 | PDC 45-0     | 1/17/2017     |<br/>
| ABC Corporation |          99820 | PDC 50-0     | 1/31/2017     |<br/>
| ABC Corporation |          99820 | PDC 50-0     | 2/22/2017     |<br/>
| ABC Corporation |          99820 | PDC 45-0     | 3/21/2017     |<br/>
| ABC Corporation |          99820 | PDC 50-0     | 4/27/2017     |<br/>
| ABC Corporation |          99820 | PDC 45-0     | 3/14/2019     |<br/>
| ABC Corporation |          99820 | PDC 45-0     | 3/14/2019     |<br/>

Ожидаемый вывод:

|  Account Name   | Account Number | Payment Term | Creation Date |<br/>

| ABC Corporation |          99820 | PDC 50-0     | 1/16/2017     |<br/>
| ABC Corporation |          99820 | PDC 45-0     | 1/17/2017     |<br/>
| ABC Corporation |          99820 | PDC 50-0     | 1/31/2017     |<br/>
| ABC Corporation |          99820 | PDC 45-0     | 3/21/2017     |<br/>
| ABC Corporation |          99820 | PDC 50-0     | 4/27/2017     |<br/>
| ABC Corporation |          99820 | PDC 45-0     | 3/14/2019     |<br/>

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

1 Ответ

2 голосов
/ 02 октября 2019

Вы можете достичь этого, используя аналитическую функцию lag.

Select * from
(select t.*, 
        lag(t."Payment Term") 
        over (partition by t."Account Number" order by t."Creation Date") as lag_pay
From (your_query)
)
Where lag_pay is null or lag_pay <> "Payment Term";

Приветствия !!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...