Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности

Новые сообщения [новые:0]
Дайджест
Горячие темы
Избранное [новые:0]
Форумы
Пользователи
Статистика
Статистика нагрузки
Мод. лог
Поиск
|
|
20.12.2017, 11:08
|
|||
|---|---|---|---|
|
|||
Группировка с условием |
|||
|
#18+
Добрый день. Пишу SQL запрос, но не могу понять как реализовать. Есть некая база, в которой записаны ip, время и количество скачанной информации, выглядит примерно так: автор217.182.132.29 17:12:34 22372 217.182.132.29 17:13:34 22372 217.182.132.29 17:17:34 22372 217.182.132.29 18:12:34 22372 217.182.132.29 18:15:34 22372 217.182.132.29 18:17:34 22372 Для этого всего я написал такой запрос, который склеивает все одинаковые ip и при этом суммирует количество скачанной информации авторSELECT Ip, SUM(Download) as Download FROM requests GROUP BY Ip ORDER BY Download DESC LIMIT 0, 500 При этом мне надо, чтобы он суммировал количество скачанной информации в период 20 минут, т.е. должны просуммироваться первые 3 записи и последние 3 записи и на вывод получиться так автор217.182.132.29 67116 217.182.132.29 67116 Пробовал разными способами, но результат один - склеивает ip, но при этом суммирует или не суммирует данные и на выводе получается так автор217.182.132.29 134232 или так автор217.182.132.29 22372 Вот мои попытки все это сделать, которые не увенчались успехом авторSELECT Ip, SUM(Download) as Download FROM requests WHERE Time >= SUBDATE(Time, INTERVAL 20 MINUTE) GROUP BY Ip ORDER BY Download DESC LIMIT 0, 500 SELECT Ip, if(Time >= SUBDATE(Time, INTERVAL 20 MINUTE), SUM(Download), Download) as Download FROM requests GROUP BY Ip ORDER BY Download DESC LIMIT 0, 500 SELECT Ip, SUM(Download) as Download FROM requests WHERE Time BETWEEN Time AND ADDDATE(Time, INTERVAL 20 MINUTE) GROUP BY Ip ORDER BY Download DESC LIMIT 0, 500 База большая, поэтому и использую LIMIT 0, 500 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
20.12.2017, 11:24
|
|||
|---|---|---|---|
Группировка с условием |
|||
|
#18+
Если правильно понял, по условию задачи напрашивается группировка по 20-минутному интервалу времени, а не фильтрация. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
20.12.2017, 11:32
|
|||
|---|---|---|---|
|
|||
Группировка с условием |
|||
|
#18+
vkle, да ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
20.12.2017, 11:35
|
|||
|---|---|---|---|
Группировка с условием |
|||
|
#18+
как можно узнать последние 20 минут по пою где нет даты? думаю надо юзать Datetime ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
20.12.2017, 11:46
|
|||
|---|---|---|---|
|
|||
Группировка с условием |
|||
|
#18+
yarnik, да, я поменял уже на datetime и написал такой запрос авторselect Ip, SUM(Download) as Download from(select Ip, Download, Time, @grp:=@grp+if(Time>@prev+interval 20 minute,1,0) as GRP, @prev:=Time from requests, (select @prev:=NULL, @grp:=1) X order by Time) A GROUP BY GRP ORDER BY Download DESC LIMIT 0, 500 Проблема только в том, что он клеит все записи с интервалом предыдущей в 20 минут, несмотря на ip ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
20.12.2017, 11:57
|
|||
|---|---|---|---|
Группировка с условием |
|||
|
#18+
Код: sql 1. 2. 3. 4. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
20.12.2017, 12:21
|
|||
|---|---|---|---|
|
|||
Группировка с условием |
|||
|
#18+
yarnik, Спасибо, но оно не сработало. Помогли на другом форуме. Вот как все должно выглядеть select Ip, SUM(Download) as Download from(select Ip, Download, Time, @grp:=@grp+if(Time>@prev+interval 20 minute or Ip!=@previp,1,0) as GRP, @prev:=Time, @previp:=Ip from requests, (select @prev:=NULL, @previp:=NULL, @grp:=1) X order by Ip, Time) A GROUP BY GRP ORDER BY Download DESC LIMIT 0, 500 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
20.12.2017, 12:22
|
|||
|---|---|---|---|
Группировка с условием |
|||
|
#18+
не понятно почему не сработало, у меня сработало =) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|

start [/forum/topic.php?fid=47&mobile=1&tid=1830168]: |
0ms |
get settings: |
8ms |
get forum list: |
11ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
42ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
42ms |
get tp. blocked users: |
1ms |
| others: | 13ms |
| total: | 136ms |

| 0 / 0 |
