Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
выборка диапазонов из списка дат
|
|||
|---|---|---|---|
|
#18+
привет всем есть мониторинг нескольких процессов, который пишет лог - включена система или нет, для этого создана вот такая табличка (MySQL 5.7): Код: sql 1. 2. 3. 4. 5. 6. 7. в неё раз в минуту пишется статус по системам, в результате имеем примерно такой набор данных: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. как можно выбрать диапазоны активности, т.е. в примере это: 2016-11-23 05:44:02 - 2016-11-23 05:46:02 и 2016-11-23 05:51:01 - 2016-11-23 05:55:01 единственная идея у меня - это добавить отдельное поле для номера группы и триггер на insert, и смотреть что было ранее 0 или 1, а в новое поле писать номер группы, и потом уже брать первую и последнюю запись в группе но наверн жеж можно и просто select-ом достать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.12.2016, 21:58 |
|
||
|
выборка диапазонов из списка дат
|
|||
|---|---|---|---|
|
#18+
2Garinно наверн жеж можно и просто select-ом достать? Можно. Но на большом объёме данных всё встанет колом... 2Garinидея у меня - это добавить отдельное поле для номера группы и триггер на insert, и смотреть что было ранее 0 или 1, а в новое поле писать номер группы, и потом уже брать первую и последнюю запись в группеНе очень идея... какой смысл делать наполовину? лучше уж сразу получать готовый список таких периодов, с посчитанными началом и концом. Сотвори таблицу этих своих "диапазонов активности", и в триггере добавляй (если период начался) или обновляй (если продолжается) запись. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.12.2016, 22:33 |
|
||
|
выборка диапазонов из списка дат
|
|||
|---|---|---|---|
|
#18+
идея в принципе хорошая, по поводу того, чтобы диапазон сразу писать, подумаю данных действительно получается много, при ежеминутном мониторинге, разовая выборка максимум будет за месяц, но всёже это тоже совсем не мало тут есть проблемка: по хорошему нужно совсем каждую запись анализировать, на предмет того, что между ними разница не более минуты, т.к. обеспечить 100% аптайм мониторинга не получится, и если "свет моргнул", мы никогда не узнаем что в течении часа запись не велась, т.к. в диапазоне это не отразится для этого можно попробовать выбрать только активные записи, и рассчитывать разницу между каждой, но это тоже совсем как не оптимально ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.12.2016, 22:58 |
|
||
|
выборка диапазонов из списка дат
|
|||
|---|---|---|---|
|
#18+
хотя если мониторинг какое то время не велся, как раз можно считать разницу во времени между записями, и если она скажем больше минуты - закрывать старую старым временем, и открывать новую... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.12.2016, 23:16 |
|
||
|
выборка диапазонов из списка дат
|
|||
|---|---|---|---|
|
#18+
Не вижу проблемы. Просто в триггере берём из таблицы самую "свежую запись" и считаем разницу от неё. Если там более полутора минут, то действуем так, будто начался новый период. Альтернативный вариант - расширить таблицу периодов, введя туда ещё и поле статуса (активный/неактивный/неизвестный). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.12.2016, 23:23 |
|
||
|
выборка диапазонов из списка дат
|
|||
|---|---|---|---|
|
#18+
2Garin , для MS SQL решение довольно простое, неоднократно предлагавшееся ранее - перенумеровать все строки последовательно и перенумеровать строки внутри групп с одинаковым статусом, затем вычесть второй номер из первого - получим инвариант периода непрерывности. Далее, например, группировка по инвариантам с отсечение ненужных диапазонов В MySQL не хочу возиться с переменнымим для нумерации строк, извините. Но как вариант - вполне допустимо, особенно если отсечь по индекс-фильтру только требуемый диапазон строк таблицы решение в MS SQL Код: 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. log_nptime_nplog_kptime_kp22016-11-23 05:44:0242016-11-23 05:46:0292016-11-23 05:51:01132016-11-23 05:55:01 таблица с двойной нумерацией log_idsystem_iddatestatusnppnpsidd1122016-11-23 05:43:0101105122016-11-23 05:47:0105236122016-11-23 05:48:0106337122016-11-23 05:49:0107438122016-11-23 05:50:01085314122016-11-23 05:56:010146815122016-11-23 05:57:01015782122016-11-23 05:44:0212113122016-11-23 05:45:0113214122016-11-23 05:46:0214319122016-11-23 05:51:01194510122016-11-23 05:52:011105511122016-11-23 05:53:021116512122016-11-23 05:54:011127513122016-11-23 05:55:0111385 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.12.2016, 13:12 |
|
||
|
выборка диапазонов из списка дат
|
|||
|---|---|---|---|
|
#18+
Cygapb-007В MySQL не хочу возиться с переменнымим для нумерации строк, извините. ...а чё извинятся то... не хочешь делать на переменных - делай по другому... ...на переменных -- достаточно легко и прямолинейно. Сама по себе задача -- курсорная -- решение требует значения из "предыдшей" строчки. СКЛ -- как язык работы с сетами, НЕ расчитан на расчеты "предыдуших" строк. Конечно можно на каждой строчке делать подселект для нахождения ближайней предыдушей... ну успехов...чё... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.12.2016, 17:24 |
|
||
|
выборка диапазонов из списка дат
|
|||
|---|---|---|---|
|
#18+
оставлю готовое решение для истории: MySQL Код: 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.12.2016, 14:00 |
|
||
|
|

start [/forum/topic.php?fid=47&msg=39358973&tid=1831050]: |
0ms |
get settings: |
8ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
30ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
50ms |
get tp. blocked users: |
1ms |
| others: | 14ms |
| total: | 138ms |

| 0 / 0 |
