SQL-根据给定列中的值的更改进行分组
我为这个令人困惑的标题道歉,我不知道该如何表达它 以下是我的数据集:SQL-根据给定列中的值的更改进行分组,sql,sql-server,Sql,Sql Server,我为这个令人困惑的标题道歉,我不知道该如何表达它 以下是我的数据集: +----+-----------------------------+--------+ | Id | Date | Amount | +----+-----------------------------+--------+ | 1 | 2019-02-01 12:14:08.8056282 | 10 | | 1 | 2019-02-04 15:23:21.3258
+----+-----------------------------+--------+
| 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
我正在努力创建一个基于Amount列中的when值更改的新列,因为我假设它可以用作另一个分组变量来解决这个问题 如果您只想在值更改时使用滞后:
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