Для SQL Server 2012 я пытаюсь назначить заданные строки последовательным корзинам на основе максимального размера корзины (100 в приведенном ниже примере) и общего количества столбцов. Большинство решений, которые я нашел, разделяются по известному значению изменения столбца, например. раздел по идентификатору отдела и т. д. Однако в этой ситуации все, что у меня есть, это последовательный идентификатор и размер. Ближайшее решение, которое я нашел, обсуждается в этой теме для SQL Server 2008, и я попробовал его, но производительность очень низкая для большого набора строк, намного хуже, чем решение на основе курсора. https://dba.stackexchange.com/questions/45179/how-can-i-write-windowing-query-what-sums-a-column-to-create-discrete-buckets
Эта таблица может содержать до 10 миллионов строк. С SQL Server 2012, поддерживающим функции SUM OVER и LAG и LEAD, интересно, может ли кто-нибудь предложить решение, основанное на 2012.
CREATE TABLE raw_data (
id INT PRIMARY KEY
, size INT NOT NULL
);
INSERT INTO raw_data
(id, size)
VALUES
( 1, 96) -- new bucket here, maximum bucket size is 100
, ( 2, 10) -- and here
, ( 3, 98) -- and here
, ( 4, 20)
, ( 5, 50)
, ( 6, 15)
, ( 7, 97)
, ( 8, 96) -- and here
;
--Expected output
--bucket_size is for illustration only, actual needed output is bucket only
id size bucket_size bucket
-----------------------------
1 100 100 1
2 10 10 2
3 98 98 3
4 20 85 4
5 50 85 4
6 15 85 4
7 97 98 5
8 1 98 5
ТИА