SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 28.06.2018 12:44:57

syn_flood
Участник
Зарегистрирован: 28.06.2018
Сообщений: 2

Два условия where

Здравствуйте.
Что-то не соображу как составить запрос. Мне нужно вывести данные появившиеся за последние 15 минут, при условии что за последние 24 часа они повторялись менее 3 раз.

Запрос на вывод данных за последние 15 минут у меня выглядит так:

SELECT ip,mac FROM zerorate WHERE date > (NOW() - INTERVAL 15 MINUTE);

Неактивен

 

#2 28.06.2018 12:56:28

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5828

Re: Два условия where

SELECT ip,mac FROM zerorate WHERE date > (NOW() - INTERVAL 15 MINUTE)
and ip,mac in(SELECT ip,mac FROM zerorate WHERE date > (NOW() - INTERVAL 1 day) group by 1,2 having count(*)<3);

Неактивен

 

#3 28.06.2018 13:18:40

syn_flood
Участник
Зарегистрирован: 28.06.2018
Сообщений: 2

Re: Два условия where

vasya написал:

SELECT ip,mac FROM zerorate WHERE date > (NOW() - INTERVAL 15 MINUTE)
and ip,mac in(SELECT ip,mac FROM zerorate WHERE date > (NOW() - INTERVAL 1 day) group by 1,2 having count(*)<3);

Спасибо. Но чёт слишком долго выполняется, почти минуту при 19к записях. При этом столбец проиндексировал, без ндиексации на минуту дольше.
Нельзя ли в mysql как-то сделать две виртуальные таблицы и сравнить их по аналогии с работой утилиты uniq в linux?

Неактивен

 

#4 28.06.2018 15:07:24

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5828

Re: Два условия where

какая у вас версия?
покажите структуру таблицы - show create table zerorate
и план запроса - explain select ...

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson