Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL-根据给定列中的值的更改进行分组_Sql_Sql Server - Fatal编程技术网

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