|
|
|
Курсор/цикл
|
|||
|---|---|---|---|
|
#18+
У меня есть похожая по структуре таблица на ORACLE. Cуть в том , что нужно распределить поставки по датам. Когда "Запас накопленным итогом" становится меньше чем половина SMAX , то должна быть поставка равная "Макс запас" - "Запас накопленным итогом" . После этого эта Поставка суммируется с "Запас накопленным итогом" Соответственно требуется решение на PL/SQL, думаю что нужен цикл какой-нибудь или курсор, сам додуматься не могу. Буду рад помощи. ДатаПродажиЗапас накопленным итогомМакс запасПоставка42613101001000426432090100042674107010004270420601000427351040100042766203010004279410101000428252001000428551001000428862001000429161001000429472001000429781001000430082001000430391001000430692001000431001001000 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.08.2016, 10:00:05 |
|
||
|
Курсор/цикл
|
|||
|---|---|---|---|
|
#18+
Код: plsql 1. 2. 3. 4. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.08.2016, 10:08:46 |
|
||
|
Курсор/цикл
|
|||
|---|---|---|---|
|
#18+
Avotge, а каким образом пересчитается запас накопленным итогом ? Таблица будет выглядеть вот так, а это неправильно: ДатаПродажиЗапас накопленным итогомМакс запасПоставка42613101001000426432090100042674107010004270420601000427351010010060427662010010010427941010010030428252010010040428551010010010042886201001001004291610100100100429472010010010042978101001001004300820100100100430391010010010043069201001001004310010100100100 Должео быть вот так: ДатаПродажиЗапас накопленным итогомМакс запасПоставка42613101001000426432090100042674107010004270420601000427351010010060427662090100042794107010004282520601000428551010010060428862090100042916107010004294720601000429781010010060430082090100043039107010004306920601000431001010010060 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.08.2016, 10:26:32 |
|
||
|
Курсор/цикл
|
|||
|---|---|---|---|
|
#18+
bot2Таблица будет выглядеть вот так, а это неправильно С чего взяли, что она будет так выглядеть, а не так которая ниже? ) Берите реальные тестовые данные (и лучше выложить их сюда, кроме самой таблицы в виде того же with-запроса) и проверяйте ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.08.2016, 10:36:58 |
|
||
|
Курсор/цикл
|
|||
|---|---|---|---|
|
#18+
Точнее, да. Она будет выглядеть так, но по-моему представленный вами последний правильный вариант не соответствует озвученным условиям. Или я ничего не понял ). Тестовые данные в общем нада ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.08.2016, 10:40:45 |
|
||
|
Курсор/цикл
|
|||
|---|---|---|---|
|
#18+
Например почему для 43008 запас накопленным итого должен получиться в итоге 90? Где это прописано в изначальной задаче и исходных данных? Речь идет о каком-то распределении по датам, при этом в исх данных дат вообще нет. В общем ниясна ничо ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.08.2016, 10:43:09 |
|
||
|
Курсор/цикл
|
|||
|---|---|---|---|
|
#18+
Avotge, 1) Дата не играет роли, это может быть dateid либо просто какой-либо период. 2) Условие задачи смоделировать обычную логику пополнения запасов на складе. Запас опускается ниже определенного уровня - после этого идет пополнение до максимального запаса. запас для даты 43008 будет 90 , потому что в предыдущий период запас был 100 и за этот период продажи были 10. 90 - 10= 90 Тестовые данные ничем не отличаются от этой таблицы , такая же таблица , только больше) Т.е. у меня есть понимание какой ответ должен быть=) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.08.2016, 11:09:03 |
|
||
|
Курсор/цикл
|
|||
|---|---|---|---|
|
#18+
bot2запас для даты 43008 будет 90, потому что в предыдущий период запас был 100 и за этот период продажи были 10. 90 - 10= 90 1. Так 43008 это дата? Не обратил внимание, решил, некий Id товара ) 2. автор90 - 10= 90 Может так и бывает, но я с такими системами не работал? ))) Может 100 - 10 = 90? 3. Где в исходных данных можно понять, что в предыдущий период запас был 100? Что это за предыдущий период, учитывая, что дата пишется в виде 43008? Или имеется в виду Макс запас 100? 4. Слово продажи вообще не фигурирует в условиях задачи, зато в ходе пояснений вы активно оперируете полем продажи. В общем надо самому четко сформулировать задачу, а там уже и сам поймешь, что и как ) bot2Тестовые данные ничем не отличаются от этой таблицы , такая же таблица , только больше) Понятно, что не отличаются, но людям было бы легче написать запрос и проверить его. Ближайший пример с удобными тестовыми данными, я об этом. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.08.2016, 11:21:31 |
|
||
|
Курсор/цикл
|
|||
|---|---|---|---|
|
#18+
bot2 Должео быть вот так: ДатаПродажиЗапас накопленным итогомМакс запасПоставка4306920601000 а откуда взялось 60 в запасе накопленным итогом? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.08.2016, 11:25:42 |
|
||
|
Курсор/цикл
|
|||
|---|---|---|---|
|
#18+
man-from-36, это остаток От исходного SMAX отнимается накопительный итог по полю "продажи", как только остаток становится меньше половины, происходит его пополнение до smax колонкой "Поставка", тут надо начать заново накопительный итог по продажам и так далее. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.08.2016, 11:33:16 |
|
||
|
Курсор/цикл
|
|||
|---|---|---|---|
|
#18+
man-from-36bot2Должео быть вот так: ДатаПродажиЗапас накопленным итогомМакс запасПоставка4306920601000 а откуда взялось 60 в запасе накопленным итогом? В предыдущем периоде 70 запас , а продажи 10 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.08.2016, 11:35:08 |
|
||
|
Курсор/цикл
|
|||
|---|---|---|---|
|
#18+
Тестовые данные with t as ( Select '1' as day, '10' as sales,'100' as stocks, '100' as maxstock, '0' as arrive from dual union Select '2' as day, '20' as sales,'0' as stocks, '100' as maxstock, '0' as arrive from dual union Select '3' as day, '10' as sales,'0' as stocks, '100' as maxstock, '0' as arrive from dual union Select '4' as day, '20' as sales,'0' as stocks, '100' as maxstock, '0' as arrive from dual union Select '5' as day, '10' as sales,'0' as stocks, '100' as maxstock, '0' as arrive from dual union Select '6' as day, '20' as sales,'0' as stocks, '100' as maxstock, '0' as arrive from dual union Select '7' as day, '10' as sales,'0' as stocks, '100' as maxstock, '0' as arrive from dual union Select '8' as day, '20' as sales,'0' as stocks, '100' as maxstock, '0' as arrive from dual union Select '9' as day, '10' as sales,'0' as stocks, '100' as maxstock, '0' as arrive from dual union Select '10' as day, '20' as sales,'0' as stocks, '100' as maxstock, '0' as arrive from dual union Select '11' as day, '10' as sales,'0' as stocks, '100' as maxstock, '0' as arrive from dual union Select '12' as day, '20' as sales,'0' as stocks, '100' as maxstock, '0' as arrive from dual union Select '13' as day, '10' as sales,'0' as stocks, '100' as maxstock, '0' as arrive from dual union Select '14' as day, '20' as sales,'0' as stocks, '100' as maxstock, '0' as arrive from dual union Select '15' as day, '10' as sales,'0' as stocks, '100' as maxstock, '0' as arrive from dual union Select '16' as day, '20' as sales,'0' as stocks, '100' as maxstock, '0' as arrive from dual union Select '17' as day, '10' as sales,'0' as stocks, '100' as maxstock, '0' as arrive from dual ) select * from t ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.08.2016, 11:49:40 |
|
||
|
Курсор/цикл
|
|||
|---|---|---|---|
|
#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. 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.08.2016, 12:22:10 |
|
||
|
Курсор/цикл
|
|||
|---|---|---|---|
|
#18+
arkx, т.е. вы знаете решение только на одном lag'е? Всё что я смог выдавить так это рекурсивный пересчет накопительного итога, возможно есть способ проще сделать "stop rsum", я его не нашел. Код: 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.08.2016, 15:39:24 |
|
||
|
Курсор/цикл
|
|||
|---|---|---|---|
|
#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. / ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.08.2016, 16:23:04 |
|
||
|
Курсор/цикл
|
|||
|---|---|---|---|
|
#18+
AvotgeУговорили. И без лагов/лидов и без рекурсии и с одним апдейтом в цикле вместо двух )) а стоило бы, pl\sql супротив sql - слабина в прихватке а тут можно чисто с лагом: твой первый апдейт взять и впендюрить туда лаги, потом танцевать и смеяться я хотел написать, но у меня компьютер забрали ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.08.2016, 19:45:59 |
|
||
|
Курсор/цикл
|
|||
|---|---|---|---|
|
#18+
танцующий джигуа стоило бы, pl\sql супротив sql - слабина в прихватке а тут можно чисто с лагом: твой первый апдейт взять и впендюрить туда лаги, потом танцевать и смеяться Круто, если покажешь чисто с лагом впендюренным в обычный апдейт, но сомневаюсь, что прокатит: тут же надо еще лаг от лага брать типа рекурсии что-то ) В общем забирай комп обратно и показывай ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.09.2016, 09:46:04 |
|
||
|
|

start [/forum/topic.php?fid=52&msg=39301227&tid=1887549]: |
0ms |
get settings: |
8ms |
get forum list: |
15ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
424ms |
get topic data: |
9ms |
get forum data: |
3ms |
get page messages: |
47ms |
get tp. blocked users: |
1ms |
| others: | 234ms |
| total: | 745ms |

| 0 / 0 |
