Комбинации сумм слагаемых

Прошу помочь с запросом, пытаюсь получить сумму желаемого числа 17404142.26 из таблицы docs c полями id, doc,docsum. В итоге получаю не все суммы числа. нужна одна из подходящих комбинаций. Т.е. пример желаемая сумма 10, ее можно собрать из значений 1+2+3+4 = 10. Комбинаций может быть много, но нужна одна которая дает эту сумму. Или не быть вообще, нужно точное совпадение. Пытаюсь делать таким запросом:

SQL

SELECT id,doc,docsum
FROM docs t
WHERE docsum+COALESCE((SELECT SUM(docsum) FROM docs WHERE docsum<t.docsum),0) <= 17404142.26
ORDER BY docsum

Итог: (61 запись, только сумма 1029341)

0.01
1.73
10002.9
10005.6
10017.59
100205.85
1002104.89
10026.85
1002676
100434.03
10044.83
100466.68
100474.56
100480.61
100488.2
1005352.96
1006.83
100605.31
100674.7
100678.94
100764.06
100769.27
100769.64
10087.06
100913.46
1009559.56
10097.74
10112.35
1011368.38
101157.33
10121.15
10121.76
1012195.78
101311.54
1013165.62
101429.65
101430.69
1015008.48
10152.72
1015400.29
101581.51
101647.72
101675.06
1019.39
101990.06
10205.46
1021.03
1021.58
1021317.57
1021377.42
1021492.97
102245.47
102295.15
102325.74
1024.73
1024068.58
10243.56
102458.45
102526.26
1025288.6
10258.8

Ответы (2 шт):

Автор решения: Akina

Пример решения задачи с использованием рекурсивного CTE. Диалект MySQL 8+

WITH RECURSIVE
cte AS ( SELECT id, CONCAT_WS(',', id) kit, val summ 
         FROM test
         UNION ALL
         SELECT test.id, CONCAT_WS(',', test.id, cte.kit), cte.summ + test.val
         FROM cte
         JOIN test ON cte.id > test.id
         WHERE cte.summ + test.val <= @sum )
SELECT kit, summ 
FROM cte
WHERE summ = @sum;

https://dbfiddle.uk/?rdbms=mysql_8.0&fiddle=f90a126cee6598ce68b00985e73cef49

Для справки - в данном fiddle CTE из 9 значений исходной таблицы генерируют 232 выходные записи (а теоретически максимальное количество - 511). С увеличением количества записей в таблице количество генерируемых записей растёт ну очень быстро...

→ Ссылка
Автор решения: Oleg Kalashnikov
    Использую базу SQlite необходимо получить только один любой вариант, в вашем запросе 

используете CONCAT_WS данной функции нет в Sqlite, подскажите как переписать.

Моя таблица: CREATE TABLE docs ( id INTEGER PRIMARY KEY, number TEXT NOT NULL, total REAL NOT NULL )

→ Ссылка