SQL - группировка по изменению значения в данном столбце - PullRequest
1 голос
/ 25 апреля 2019

Извиняюсь за запутанный заголовок, я не знал, как его сформулировать.

Ниже приведен мой набор данных:

+----+-----------------------------+--------+
| Id |            Date             | Amount |
+----+-----------------------------+--------+
|  1 | 2019-02-01 12:14:08.8056282 |     10 |
|  1 | 2019-02-04 15:23:21.3258719 |     10 |
|  1 | 2019-02-06 17:29:16.9267440 |     15 |
|  1 | 2019-02-08 14:18:14.9710497 |     10 |
+----+-----------------------------+--------+

Это пример банка, пытающегося получить деньги от должника, когда сначала пытаются получить 10% от причитающейся суммы,если с карты снимается плата, то предпринимается попытка 15%, если это выдает ошибку (например, недостаточно средств), снова предпринимается попытка 10%.

Желаемый результат будет:

+----+--------+---------+
| Id | Amount | Attempt |
+----+--------+---------+
|  1 |     10 |       1 |
|  1 |     15 |       2 |
|  1 |     10 |       3 |
+----+--------+---------+

Я пытался:

SELECT Id, Amount
FROM table1
GROUP BY Id, Amount

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

1 Ответ

2 голосов
/ 25 апреля 2019

Если вы просто хотите, чтобы значение изменилось, используйте lag():

select t.id, t.amount,
       row_number() over (partition by id order by date) as attempt
from (select t.*, lag(amount) over (partition by id order by date) as prev_amount
      from table1 t
     ) t
where prev_amount is null or prev_amount <> amount
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...