|
Задача с интервалами
|
|||
---|---|---|---|
#18+
Приветствую. Прошу тухлыми помидорами не кидать, если задаю глупый вопрос. Задача: дано n количество интервалов 17.11.2021 08:01:37 - 17.11.2021 08:03:56 17.11.2021 08:03:02 - 17.11.2021 08:06:01 17.11.2021 08:03:33 - 17.11.2021 08:06:50 17.11.2021 08:03:49 - 17.11.2021 08:06:30 .... Я хочу получить периоды, в зависимости от количества пересечений. То есть 17.11.2021 08:03:02 - 17.11.2021 08:03:33 - 2 пересечения 17.11.2021 08:03:33 - 17.11.2021 08:03:49 - 3 пересечения 17.11.2021 08:03:49 - 17.11.2021 08:03:56 - 4 пересечения 17.11.2021 08:03:56 - 17.11.2021 08:06:01 - 3 пересечения 17.11.2021 08:06:01 - 17.11.2021 08:06:30 - 2 пересечения Один период это время работы оператора, а я хочу знать, сколько по времени были заняты 1,2,3...n операторов. Можно это как то решить на чистом sql в один запрос? ... |
|||
:
Нравится:
Не нравится:
|
|||
19.11.2021, 15:53 |
|
Задача с интервалами
|
|||
---|---|---|---|
#18+
Код: sql 1. 2. 3. 4. 5. 6.
... |
|||
:
Нравится:
Не нравится:
|
|||
19.11.2021, 17:27 |
|
Задача с интервалами
|
|||
---|---|---|---|
#18+
demon1992, Если я правильно понимаю то периоды 17.11.2021 08:01:37 - 17.11.2021 08:03:02 17.11.2021 08:06:30 - 17.11.2021 08:06:50 тоже должны быть, или как? ... |
|||
:
Нравится:
Не нравится:
|
|||
19.11.2021, 18:02 |
|
Задача с интервалами
|
|||
---|---|---|---|
#18+
Если интервалы хранятся в таблице, содержащей два поля: начало интервала и окончание интервала, то... монстра можно попробовать слепить Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12.
здесь таблица intervals содержит два поля: timestamp1 -- начало интервала, timestamp2 -- окончание интервала. Но пользоваться таким убежищем я бы не стал. Либо структуру БД менять специально под эту задачу, либо делать ХП. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.11.2021, 18:40 |
|
Задача с интервалами
|
|||
---|---|---|---|
#18+
demon1992, Создаем такую служебную процедуру GET_TIMES Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22.
Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15.
... |
|||
:
Нравится:
Не нравится:
|
|||
19.11.2021, 18:49 |
|
Задача с интервалами
|
|||
---|---|---|---|
#18+
demon1992, искать пересечения - наверно неправильный подход. Например, один работал с 08:00 до 09:00, другой - с 08:10 до 08:50, третий - с 08:20 до 08:40. Пересечений нет. Хотя с 08:20 до 08:40 работали трое. Я бы строил график по времени и количеству работающих. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.11.2021, 19:38 |
|
Задача с интервалами
|
|||
---|---|---|---|
#18+
Сдается мне самым быстрым будет подсчитать сколько открытых смен попадало в каждую минуту суток. получаешь список пар "номер минуты" "кол-во" 0 0 1 2 2 2 и тп далее этот список группируешь, рисуешь графики и прочее. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.11.2021, 19:48 |
|
Задача с интервалами
|
|||
---|---|---|---|
#18+
Вот еще один вариант, на оконных функциях. Мой предыдущий не при всех данных дает правильный результат Это должен всегда показывать хороший результат Дополнительная процедура Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14.
Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19.
Отличная пятничная задачка ... |
|||
:
Нравится:
Не нравится:
|
|||
19.11.2021, 20:51 |
|
Задача с интервалами
|
|||
---|---|---|---|
#18+
Шавлюк Евгений Создаем такую служебную процедуру <...> Непонятно... Если уж все равно создавать процедуру, то почему все сразу не выполнить в процедуре или EXECUTE BLOCK? Будет проще и понятнее. Как-то так: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20.
... |
|||
:
Нравится:
Не нравится:
|
|||
20.11.2021, 18:36 |
|
|
start [/forum/topic.php?fid=40&msg=40113200&tid=1559885]: |
0ms |
get settings: |
9ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
174ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
49ms |
get tp. blocked users: |
1ms |
others: | 13ms |
total: | 279ms |
0 / 0 |