Я использую MySQL 8.0
У меня есть запрос, который проходит по каждой строке в таблице, я собираюсь использовать подзапрос, который вернет количество строк, удовлетворяющих условию. Я хочу, чтобы он возвращал только строки, если подзапрос возвращает более 1 строки.
Мой запрос:
WITH abnormal_rents as (
SELECT r.*
from rents r
where r.start_time >= '2020-08-04 12:00:00'
and (type = 'abnormal_rents'))
SELECT *
FROM abnormal_rents t1
where 2 <= (select count(*)
from abnormal_rents t2
where t2.user_id = t1.user_id
and t2.item_id = t1.item_id
and t2.time between t1.time - interval 10 minute and t1.time
and t2.rent_id != t1.rent_id);
Итак, для каждой строки в t1 я хочу проверить, есть ли в нем более одной строка с одинаковым user_id, item_id и временем между t1.time - интервал 10 минут ~ t1.time.
сравнение целочисленного значения с результатом подсчета (подзапрос) работает? Если нет, есть ли способ сделать это?
Я запускаю запрос, и он выполняется не менее 15 минут, но все еще не выводит результат.
EDIT: вместо sub- запрос в операторе where, я запросил в операторе select
WITH abnormal_rents as (
SELECT r.*
from rents r
where r.start_time >= '2020-08-04 12:00:00'
and (type = 'abnormal_rents'))
SELECT *
, (select count(*)
from abnormal_rents t2
where t2.user_id = t1.user_id
and t2.item_id = t1.item_id
and t2.time between t1.time - interval 10 minute and t1.time
and t2.rent_id != t1.rent_id) as cnt
FROM abnormal_rents t1
HAVING cnt >= 2;