получить строки, если количество (подзапрос) больше или равно целочисленному значению - PullRequest
0 голосов
/ 05 августа 2020

Я использую 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;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...