Дата запроса ЛЮБОЙ записи, возвращенной с группой и имеющей> 1 - PullRequest
0 голосов
/ 25 июня 2019

У меня есть следующий запрос, который возвращает строки, когда oID (m.oID) одной таблицы существует более одного раза как внешний ключ (au.fk_oID) в другой таблице.

Цель - Чтобы создать запрос, который возвращает ALL дубликаты au.fk_oid, где хотя бы у одного из них имеет дату вставки в диапазоне

SELECT 
    m.oid, m.DrugName, date(m.drugstart), date(m.drugend), au.action, date(au.insert_time)
FROM
    p_medication_auth au
        LEFT JOIN
    p_medication m ON au.fk2_oid = m.oid
WHERE
    au.action IN (5871 , 5873)
        AND DATE(au.insert_time) BETWEEN '2019-01-01' AND CURDATE()
GROUP BY m.oid
HAVING COUNT(au.fk_oid) > 1

Конечно, при запросе дат таким образом с группой по и с> 1 будут искать только те случаи, когда au.fk_oid появляется более одного раза в один и тот же день.

Мне нужно вернуть экземпляры, в которых au.fk_oid появляется более одного раза, где хотя бы один из этих экземпляров имеет дату (date (au.insert_time)) в пределах диапазона.

1 Ответ

2 голосов
/ 25 июня 2019

Вы можете добавить оператор case..when после запроса, удаляя условие AND DATE(au.insert_time) BETWEEN '2019-01-01' AND CURDATE() из WHERE части предложения

SELECT m.oid,
       m.DrugName,
       date(m.drugstart),
       date(m.drugend),
       au.action,
       date(au.insert_time)
  FROM p_medication_auth au
  LEFT JOIN p_medication m
    ON au.fk2_oid = m.oid
 WHERE au.action IN (5871, 5873)
 GROUP BY m.oid
HAVING COUNT(au.fk_oid) > 1
   AND MAX(case when date(au.insert_time) between date'2019-01-01' and curdate() then 
                1
           else
                0     
           end)=1 

Демо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...