Новые сообщения [новые:0]
Дайджест
Горячие темы
Избранное [новые:0]
Форумы
Пользователи
Статистика
Статистика нагрузки
Мод. лог
Поиск
|
13.10.2021, 08:56
|
|||
---|---|---|---|
Двухлинейное FIFO - в запросе. |
|||
#18+
Добрый день. Прошу помочь решить задачу - кто знает или просто указать на готовое решение(где почитать). Я убежден, что 100% есть такая математическая задачка, но я не знаю ее общеупотребительное название. Какое-нибудь "двойное(двухлинейное) FIFО". Задача. Есть приходы(таблица PRIHOD), отсортированные по порядку поступления(номер по порядку(N) и сумма(SUMM)). так же Есть расходы(таблица RASHOD), отсортированные по порядку поступления(номер по порядку(N) и сумма(SUMM)). Суть: нужно связать расходы(по методу FIFO) с приходами(по методу FIFO) по порядку и иметь сумму связи. какой приход использовался для покрытия какого расхода и сумма покрытия. Чтобы проще понять - придумал аналогию с перегрузкой. Допустим, есть пронумерованные вагоны заполненные кирпичами(мы знаем номер и кол-во кирпичей в каждом вагоне) - это приходы. И так же есть пронумерованные фуры пустые (мы знаем номер и сколько кирпичей поместится в фуру) - это расходы. Емкости вагонов и фур у всех разные. Нужно: сколько можно перегрузить кирпичи из вагонов в фуры. По следующему алгоритму(2 линии FIFO): Первой загружаем первую фуру кирпичами из первого вагона. Если первая фура загружена полностью - начинаем грузить вторую из того же первого вагона до его полного опустошения и т.д. Если же первая фура еще не заполнена, а первый вагон уже пуст - то грузим в нее из следующего по порядку вагона и т.д. И самое главное записать в какую фуру из какого вагона сколько кирпичей перегружено Напр. в 1 фуру из 1 вагона 1000 кирп. в 2 фуру из 1 вагона 500 кирп. в 2 фуру из 2 вагона 300 кирп. в 2 фуру из 3 вагона 600 кирп. в 3 фуру из 3 вагона 400 кирп. и т.д. Конечно можно написать цикл, но хотелось бы одном запросом. Можно использовать аналитические(оконные) функции и т.п. Сервер: Oracle Database 11g Для удобства есть пример таблицы приходов и расходов и что должно получиться. Код: plsql 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.
Кто прочел до конца - спасибо за терпение. ... |
|||
:
Нравится:
Не нравится:
|
|||
|
13.10.2021, 09:57
|
|||
---|---|---|---|
Двухлинейное FIFO - в запросе. |
|||
#18+
Jaffar, 1) сумарные емкости вагонов и фур равны? 2) декартовое обьеденение допускается? ps model ..... stax ... |
|||
:
Нравится:
Не нравится:
|
|||
|
13.10.2021, 11:07
|
|||
---|---|---|---|
Двухлинейное FIFO - в запросе. |
|||
#18+
автор1) суммарные емкости вагонов и фур равны? - это не оговаривается. кирпичей в вагонах может быть больше чем места в фурах, а может быть места в фурах больше чем кирпичей в вагонах. а может быть и поровну. автор2) декартовое обьеденение допускается? да, любые запросы подзапросы и т.п. ... |
|||
:
Нравится:
Не нравится:
|
|||
|
13.10.2021, 11:12
|
|||
---|---|---|---|
Двухлинейное FIFO - в запросе. |
|||
#18+
Помогите с запросом с аналит. ф-циями разбивка суммы на составляющие аналитическими функциями очень похоже на то что надо ... |
|||
:
Нравится:
Не нравится:
|
|||
|
13.10.2021, 12:01
|
|||
---|---|---|---|
Двухлинейное FIFO - в запросе. |
|||
#18+
Jaffar, от декартового надо отказаться, будет чутку сложнее условие в union all (form t,prihod p, rashod r where ...) начал с декартового и ... если не сможете, я поправлю Код: plsql 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.
сильно не не стировал, допилете ..... stax ... |
|||
:
Нравится:
Не нравится:
|
|||
|
13.10.2021, 12:16
|
|||
---|---|---|---|
Двухлинейное FIFO - в запросе. |
|||
#18+
Stax, спасибо. ... |
|||
:
Нравится:
Не нравится:
|
|||
|
13.10.2021, 12:36
|
|||
---|---|---|---|
Двухлинейное FIFO - в запросе. |
|||
#18+
Код: plsql 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.
... |
|||
:
Нравится:
Не нравится:
|
|||
|
13.10.2021, 13:34
|
|||
---|---|---|---|
|
|||
Двухлинейное FIFO - в запросе. |
|||
#18+
Stax, Я тоже сначала хотел через рекурсию, но заколебался составлять условие выбора следующей строки... Показалось, что проще в лоб: Код: plsql 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.
Надо еще посмотреть повнимательнее решения, на которые давали ссылки выше. Уж больно они короткие и простые, чувствую себя двоечником ... |
|||
:
Нравится:
Не нравится:
|
|||
|
14.10.2021, 13:33
|
|||
---|---|---|---|
Двухлинейное FIFO - в запросе. |
|||
#18+
на основе темы про "бутылочки" реально работает :) Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16.
... |
|||
:
Нравится:
Не нравится:
|
|||
|
|
start [/forum/topic.php?fid=52&tablet=1&tid=1879822]: |
0ms |
get settings: |
17ms |
get forum list: |
5ms |
check forum access: |
1ms |
check topic access: |
1ms |
track hit: |
41ms |
get topic data: |
5ms |
get forum data: |
1ms |
get page messages: |
228ms |
get tp. blocked users: |
1ms |
others: | 328ms |
total: | 628ms |
0 / 0 |