Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
query
|
|||
|---|---|---|---|
|
#18+
Всем привет, выручайте. Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. Задача: Есть переменная, по значению которой необходимо сделать нарезку выборки по нарастающему итогу произведения количества и веса штуки каждой строки (сортировка по Id). Проблема в том, что мне нужно повысить качество нарезки, т.е к примеру, строка с Id = 3, должна быть разбита на две строки: 3_1 (1я строка разбиения) должна иметь следующие значения: Qty = 2 (т.к. нарастающий итог предшествующей строки равен 70, предел переменной 100, на текущей строке мы можем взять только 2 шт * 12 = 24 (т.е. 70 пред. + 24 текущ <= @MaxPartWgt). В расчете должны участвовать только целочисленный тип. 3_2 (2я строка разбиения) должна содержать остаток от исходной строки - (3_1), и участвовать в последующем расчете группы. Повысить качество нарезки могу только, обернув в цикл, на каждой итерации заполнять временную таблицу, но это явно не корректный подход к решению. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.06.2019, 11:01 |
|
||
|
query
|
|||
|---|---|---|---|
|
#18+
О боже... неужели нельзя было изобразить всё то же, но используя CTE? Да и с объяснением у Вас не сильно получилось - лучше было бы в виде таблиц показать исходник, результат, и уже к ним дать пояснения, почему так. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.06.2019, 11:32 |
|
||
|
query
|
|||
|---|---|---|---|
|
#18+
IDVTЕсть переменная, по значению которой необходимо сделать нарезку выборки по нарастающему итогу произведения количества и веса штуки каждой строки (сортировка по Id).А менять местами строки ради "более качественной нарезки" - нельзя? строго чтобы по возрастанию ID? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.06.2019, 11:34 |
|
||
|
query
|
|||
|---|---|---|---|
|
#18+
Менять строки можно, да уж... с объяснением действительно беда =( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.06.2019, 11:38 |
|
||
|
query
|
|||
|---|---|---|---|
|
#18+
IDVTМенять строки можноНу тогда это задача о рюкзаке... а решать NP-задачи на SQL я бы не советовал. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.06.2019, 11:44 |
|
||
|
query
|
|||
|---|---|---|---|
|
#18+
Вот исходный запрос, но в более (имхо) вменяемой форме: fiddle ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.06.2019, 11:46 |
|
||
|
query
|
|||
|---|---|---|---|
|
#18+
Ок. спасибо! В случае если запрещено менять строки местами, то тут рекурсии хватит? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.06.2019, 11:59 |
|
||
|
query
|
|||
|---|---|---|---|
|
#18+
IDVTПроблема в том, что мне нужно повысить качество нарезки, т.е к примеру, строка с Id = 3, должна быть разбита на две строки: вот что-то типа этого "повышает качество", но результат всё-равно не на 100% по ТЗ (см.NumberPartWgt=11), т.е. в одну группу могут попасть "штуки" с суммарным весом больше @MaxPartWgt На 100% правильно будет если пронумеровать моё cte и потом на нем сделать рекурсию, на каждом шаге определяя текущую сумму в группе, и если она превысит @MaxPartWgt, - начинать новую группу. ... что по сути и будет твоим вариантом с циклом и времянкой ... Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. IdNumberPartWgtItemWgtQtyxOverWgt11103302111474311229832123344213486521019653103266490116742326284849485885895949496997510620195107204751186029511960155111060275111160135121164199121264163121364291131432123141420263151540383151640263151740383151840263151940243 fnGetNums Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.06.2019, 12:03 |
|
||
|
query
|
|||
|---|---|---|---|
|
#18+
court , Насколько я понимаю, "штуки" неделимы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.06.2019, 12:14 |
|
||
|
query
|
|||
|---|---|---|---|
|
#18+
Штуки одной строки можно разделять, на подстроки, но только оперируя целыми числами (int). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.06.2019, 12:17 |
|
||
|
query
|
|||
|---|---|---|---|
|
#18+
Akina court , Насколько я понимаю, "штуки" неделимы.... не совсем понимаю про что ты ТС ведь и пришел с такой просьбой: разделить "штуки" вида Id=3 между двумя группами ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.06.2019, 12:19 |
|
||
|
query
|
|||
|---|---|---|---|
|
#18+
courtНа 100% правильно будет если пронумеровать моё cte и потом на нем сделать рекурсию, на каждом шаге определяя текущую сумму в группе, и если она превысит @MaxPartWgt, - начинать новую группу. ... что по сути и будет твоим вариантом с циклом и времянкой ...навсякий, что я имел в виду Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. IdItemWgtNumberPartWgtQtySumOnNumberPartWgtOnCurrId110133021114743121298312233641324885102198510333069041907235246885694886648996593997872102071921020848011609160116010160116011160116012160116013160116014160126415164126416164126417164126418164133218196142019240154019180154020280154021280154022280154023280154024280154025140 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.06.2019, 12:21 |
|
||
|
query
|
|||
|---|---|---|---|
|
#18+
Count, да я тебя понял =) разобрал предыдущий твой вариант, логику уловил, спасибо огромное всем за помощь! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.06.2019, 12:30 |
|
||
|
|

start [/forum/topic.php?fid=46&msg=39825260&tid=1687693]: |
0ms |
get settings: |
10ms |
get forum list: |
17ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
47ms |
get topic data: |
10ms |
get forum data: |
5ms |
get page messages: |
54ms |
get tp. blocked users: |
2ms |
| others: | 263ms |
| total: | 416ms |

| 0 / 0 |
