Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Группировка с условием / 9 сообщений из 9, страница 1 из 1
20.12.2017, 11:08
    #39572564
checkdimon
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Группировка с условием
Добрый день. Пишу 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
...
Рейтинг: 0 / 0
20.12.2017, 11:24
    #39572584
vkle
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Группировка с условием
Если правильно понял, по условию задачи напрашивается группировка по 20-минутному интервалу времени, а не фильтрация.
...
Рейтинг: 0 / 0
20.12.2017, 11:32
    #39572592
checkdimon
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Группировка с условием
vkle, да
...
Рейтинг: 0 / 0
20.12.2017, 11:35
    #39572597
yarnik
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Группировка с условием
как можно узнать последние 20 минут по пою где нет даты?
думаю надо юзать Datetime
...
Рейтинг: 0 / 0
20.12.2017, 11:46
    #39572606
checkdimon
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Группировка с условием
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
...
Рейтинг: 0 / 0
20.12.2017, 11:57
    #39572613
yarnik
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Группировка с условием
Код: sql
1.
2.
3.
4.
SELECT `Ip`, SUM(`Download`)
FROM `requests`
WHERE NOW() < `Time` + INTERVAL 20 MINUTE 
GROUP BY `Ip`
...
Рейтинг: 0 / 0
20.12.2017, 12:21
    #39572641
checkdimon
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Группировка с условием
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
...
Рейтинг: 0 / 0
20.12.2017, 12:22
    #39572643
yarnik
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Группировка с условием
не понятно почему не сработало, у меня сработало =)
...
Рейтинг: 0 / 0
20.12.2017, 12:30
    #39572654
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Группировка с условием
checkdimon
Код: sql
1.
@grp:=@grp+if(Time>@prev+interval 20 minute or Ip!=@previp,1,0) as GRP,


Зачем нужна лишняя проверка? просто
Код: sql
1.
@grp:=@grp+(Time>@prev+interval 20 minute or Ip!=@previp) as GRP
...
Рейтинг: 0 / 0
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Группировка с условием / 9 сообщений из 9, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]