|
|
|
Выборка одновременных событий
|
|||
|---|---|---|---|
|
#18+
Здравствуйте! Уже несколько дней бьюсь над задачей, но невыходит у меня каменный цветок.... Есть таблица events с полями: start - дата начала события end - дата конца события name - идентификатор события в виде "имя-номер" (с этим форматом записи то и проблемы...) Задача - получить за период к примеру текущий день выборку всех событий и полем максимальное количество одновактивных событий данного типа. Так выбираем все записи за период, но как теперь посчитать одновременные события? Код: plsql 1. 2. 3. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.01.2014, 23:29:45 |
|
||
|
Выборка одновременных событий
|
|||
|---|---|---|---|
|
#18+
Avenitstart - дата начала события end - дата конца событиятак date или всё же datetime? если второе, то например так Код: sql 1. 2. 3. 4. 5. 6. 7. numbers - заранее сгенерированная таблица с числами от 1 до (минимум) 86400. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.01.2014, 07:09:29 |
|
||
|
Выборка одновременных событий
|
|||
|---|---|---|---|
|
#18+
Спасибо за ответ, вот пример таблицы и данных: Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. Результатом запроса (в запросе задан период start<=2014-01-26 AND end >=2014-01-26, т.е. все строки, где время действия подпадает под заданный период. Событие может начинаться до заданного периода и заканчиваться после него) должна быть такая таблица таблица: Код: plsql 1. 2. 3. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.01.2014, 16:54:12 |
|
||
|
Выборка одновременных событий
|
|||
|---|---|---|---|
|
#18+
В таблице к тому же могут быть записи с повторяющимся полем name, но другом периодом естественно, например: Код: plsql 1. 2. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.01.2014, 16:56:16 |
|
||
|
Выборка одновременных событий
|
|||
|---|---|---|---|
|
#18+
Avenitдолжна быть такая таблица таблица: event_name cnttesta 2testb 1 А по-моему, в первой строке должн быть 3, а не 2... Постановка задачи совершенно пьяная и невменяемая. Попробуйте переформулировать задачу... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.01.2014, 22:21:47 |
|
||
|
Выборка одновременных событий
|
|||
|---|---|---|---|
|
#18+
Нет, все верно. testa-3 и testa-4 с 6:20 до 6:30 были одновременно активны, это максимум одновременно активных, поэтому 2. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.01.2014, 01:07:10 |
|
||
|
Выборка одновременных событий
|
|||
|---|---|---|---|
|
#18+
tanglir Код: sql 1. ошибочка, надо так (за 24 число): Код: sql 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.01.2014, 08:30:28 |
|
||
|
Выборка одновременных событий
|
|||
|---|---|---|---|
|
#18+
Avenit , ааа, вон оно как. Т.е. я верно понял. что если идут события 10:00-11:00 10:10-10:20 10:40-10:50 то ответ тоже 2? Если так, то для группы достаточно для каждой записи посчитать, сколько раз начало события находится между началом и концом других событий, и взять максимум этого значения (плюс адын). Группить надо по имени (т.е. тупо по выражению SUBSTRING_INDEX(name, '-', 1)) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.01.2014, 08:50:26 |
|
||
|
Выборка одновременных событий
|
|||
|---|---|---|---|
|
#18+
Т.е. навскидку без фильтрации по дате будет что-то вроде Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. Есссно фильтр по дате достаточно ввести в подзапросе только по первой копии. Или по двум - в зависимости от постановки задачи. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.01.2014, 08:57:33 |
|
||
|
|

start [/forum/topic.php?fid=47&msg=38538011&tid=1835340]: |
0ms |
get settings: |
5ms |
get forum list: |
10ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
46ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
33ms |
get tp. blocked users: |
1ms |
| others: | 204ms |
| total: | 313ms |

| 0 / 0 |
