|
Задача про скорость наполнения бассейна
|
|||
---|---|---|---|
#18+
Всем привет, Возможно, было здесь и много раз, но как конкретно искать не знаю, на start_of_group не похоже. Может, поможете составить запрос. Есть бассейн бесконечной вместимости. К нему могут подходить люди и каждый с момента start_time по end_time наполнять его водой со скоростью val. Мне необходимо узнать в каждый конкретный момент времени скорость наполнения бассейна. Запрос следующего вида задачу, в общем-то, решает: Код: 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.
Но на реальных данных (миллион записей, почти все даты различны) картезиан из JOIN-а получается неприятно длительным. Возможно ли как-то достичь эквивалентного результата более производительно? Оптимально - в один проход по исходной таблице. Последняя идея наталкивает на мысль об аналитических функциях, но как их соорудить для интервалов (start_time, end_time) - не могу понять. Чем ближе к ANSI, тем лучше: целевая БД хоть и сильно совместима с Oracle SQL, но всё же ряд свежих и/или экзотических фич отсутвует. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.12.2021, 01:53 |
|
Задача про скорость наполнения бассейна
|
|||
---|---|---|---|
#18+
but wait ... https://www.sql.ru/forum/actualsearch.aspx?search=?????????????? ?????????&sin=0&bid=3&a=&ma=0&dt=-1&s=1&so=1 Так и знал, что формулирование вопроса заставит переобдумать всё. Надо будет полистать решения выше. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.12.2021, 02:26 |
|
Задача про скорость наполнения бассейна
|
|||
---|---|---|---|
#18+
aborigen, просто unpivot + sum()over(): Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23.
... |
|||
:
Нравится:
Не нравится:
|
|||
27.12.2021, 02:34 |
|
Задача про скорость наполнения бассейна
|
|||
---|---|---|---|
#18+
+ ansi Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16.
... |
|||
:
Нравится:
Не нравится:
|
|||
27.12.2021, 02:38 |
|
|
start [/forum/topic.php?fid=52&tid=1879640]: |
0ms |
get settings: |
26ms |
get forum list: |
16ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
46ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
131ms |
get tp. blocked users: |
2ms |
others: | 365ms |
total: | 608ms |
0 / 0 |