|
Сопоставление двух рядов поставки и отгрузки
|
|||
---|---|---|---|
#18+
Господа, есть такая задача про производство. Есть некий черный ящик под название производство. В него на вход подается сырье, в данном случае мясо #meat. А на выходе получается продукция #product. Известно, что столько сырья пришло и столько-то продукции отгрузили. При этом нет никаких данных, что происходило внутри и какое сырье стало какой продукцией. Надо поставить в соответствие сырье и продукцию про принципу FIFO. То есть первое сырье стало первой продукцией. Пример результата в конце запроса. Кто предложит наиболее оптимальный способ решение такой задачи на большом объеме. Нужен, в том числе, инкремент по датам. Код: 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.
... |
|||
:
Нравится:
Не нравится:
|
|||
16.12.2019, 12:09 |
|
Сопоставление двух рядов поставки и отгрузки
|
|||
---|---|---|---|
#18+
Ради прикола поинтересуюсь: Чего делать, если продукции больше сырья случится? Полиционеров вызывать? ... |
|||
:
Нравится:
Не нравится:
|
|||
16.12.2019, 13:13 |
|
Сопоставление двух рядов поставки и отгрузки
|
|||
---|---|---|---|
#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.
... |
|||
:
Нравится:
Не нравится:
|
|||
16.12.2019, 13:35 |
|
Сопоставление двух рядов поставки и отгрузки
|
|||
---|---|---|---|
#18+
... |
|||
:
Нравится:
Не нравится:
|
|||
16.12.2019, 13:42 |
|
Сопоставление двух рядов поставки и отгрузки
|
|||
---|---|---|---|
#18+
Shakill, ага, я ее помню :) ... |
|||
:
Нравится:
Не нравится:
|
|||
16.12.2019, 13:57 |
|
Сопоставление двух рядов поставки и отгрузки
|
|||
---|---|---|---|
#18+
aleks222 Ради прикола поинтересуюсь: Чего делать, если продукции больше сырья случится? Полиционеров вызывать? Премию давать. А вот что делать, если продукции меньше сырья получилось? ... |
|||
:
Нравится:
Не нравится:
|
|||
16.12.2019, 14:09 |
|
Сопоставление двух рядов поставки и отгрузки
|
|||
---|---|---|---|
#18+
a_voronin А вот что делать, если продукции меньше сырья получилось? Причин этого много, брак, кража, пересортица, технологические издержки итд, всё это называется "недостача", как правило на недостачу составляется документ и деньги (зависимости от степени передела исходного сырья) взимаются с "виновных" либо "гасятся как убыток" из прибыли предприятия. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.12.2019, 18:02 |
|
Сопоставление двух рядов поставки и отгрузки
|
|||
---|---|---|---|
#18+
PaulWist a_voronin А вот что делать, если продукции меньше сырья получилось? Причин этого много, брак, кража, пересортица, технологические издержки итд, всё это называется "недостача", как правило на недостачу составляется документ и деньги (зависимости от степени передела исходного сырья) взимаются с "виновных" либо "гасятся как убыток" из прибыли предприятия. Тут задача посчитать себестоимость, а расхождения в балансе и поиск виновных не наша забота. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.12.2019, 08:17 |
|
Сопоставление двух рядов поставки и отгрузки
|
|||
---|---|---|---|
#18+
invm, На большом объеме (100000 против 1000000) данный скрипт работает 40+ минут. И на последнем запросе nested loop. При таком раскладе, возможно, будет эффективнее открыть два курсора и читать с обоих таблиц "параллельно" в цикле. Индексы особо не помогают Код: sql 1. 2.
Код: sql 1. 2.
Есть идеи как превратить это hash или merge join? Возможно надо пробить по ROW_NUMBER полное множество всех уникальных значений p__start, m.m__end, p.p__end, m.m__start . Код: 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. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. 91. 92. 93. 94. 95.
... |
|||
:
Нравится:
Не нравится:
|
|||
17.12.2019, 09:29 |
|
Сопоставление двух рядов поставки и отгрузки
|
|||
---|---|---|---|
#18+
Shakill, Я бы не сказал, что задачу решили применительно большому объёму. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.12.2019, 09:31 |
|
Сопоставление двух рядов поставки и отгрузки
|
|||
---|---|---|---|
#18+
invm, для информации. На вертике, последний запрос данного скрипта за 2 секунды. Причем он ухитрился сделать hash join на сложном выражении Код: 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. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86.
+-DML INSERT [Cost: 0, Rows: 0] Target Projection: TEST.result_super (SORT BY PROJECTION SORT ORDER) (RESEGMENT)Target Prep: +---> SORT [Cost: 83K, Rows: 10K (NO STATISTICS)] (PATH ID: 3) Order: _m.m__start ASC +---> JOIN HASH [Cost: 82K, Rows: 10K (NO STATISTICS)] (PATH ID: 4) Join Filter: (_p.p__start <= _m.m__end) AND (_p.p__end >= _m.m__start)Materialize at Output: _p.StockId, _p.ProductId +-- Outer -> STORAGE ACCESS for _p [Cost: 1K, Rows: 10K (NO STATISTICS)] (PATH ID: 5) Projection: TEST.p_superMaterialize: _p.p__start, _p.p__end +-- Inner -> STORAGE ACCESS for _m [Cost: 2K, Rows: 10K (NO STATISTICS)] (PATH ID: 6) Projection: TEST.m_superMaterialize: _m.MeatId, _m.m__start, _m.m__end ... |
|||
:
Нравится:
Не нравится:
|
|||
17.12.2019, 10:31 |
|
Сопоставление двух рядов поставки и отгрузки
|
|||
---|---|---|---|
#18+
a_voronin, Возможность соединения по hash или merge зависит не от сложности выражения, а от наличия предиката эквивалентности. На ваших данных таковой невозможен. На курсорах будет несомненно быстрее. Но вот так должно быть быстрее курсоров Код: 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.
... |
|||
:
Нравится:
Не нравится:
|
|||
17.12.2019, 11:52 |
|
Сопоставление двух рядов поставки и отгрузки
|
|||
---|---|---|---|
#18+
У вас неправильный формат хранения данных. Измените на Код: sql 1. 2. 3. 4.
и жизнь станет проще - жизнь станет веселей. Код: plaintext 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.
... |
|||
:
Нравится:
Не нравится:
|
|||
17.12.2019, 15:06 |
|
|
start [/forum/topic.php?fid=46&tid=1686769]: |
0ms |
get settings: |
11ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
280ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
53ms |
get tp. blocked users: |
1ms |
others: | 268ms |
total: | 645ms |
0 / 0 |