查询分组归还且大于1的ANY记录的日期

时间:2019-06-25 10:07:05

标签: mysql sql

我有以下查询,当一个表的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

当然,用 group by 具有> 1 的这种方式查询日期只会查找au.fk_oid多次出现在同一实例上的实例天。

我需要返回au.fk_oid出现多次的实例,其中至少有一个实例的日期(date(au.insert_time))在范围内。

1 个答案:

答案 0 :(得分:2)

您可以在查询后添加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 

Demo