我有以下数据:
DECLARE @t TABLE (usr VARCHAR(100), dt DATE, amount INT);
INSERT INTO @t VALUES
('a', '2018-01-01', 100), -- 100
('a', '2018-02-01', 100), -- 200
('a', '2018-03-01', 100), -- 300
('a', '2018-04-01', 100), -- 400
('a', '2018-05-01', 100), -- 500
('b', '2018-01-01', 150), -- 150
('b', '2018-02-01', 150), -- 300
('b', '2018-03-01', 150), -- 450
('b', '2018-04-01', 150), -- 600
('b', '2018-05-01', 150); -- 750
我想选择行直到数量的累计总和达到指定值,比如300或301(用户变量或列)。但是有以下要求:
- 对于300,我想选择a的前3行和b的前2行
- 对于301,我想选择a的前4行和b的前3行
这应该很简单,但我找到的解决方案无法处理第二种情况。
amount
是否保证为非负数?即运行总数永远不会下降? - Martin Smith