我有以下查询,当一个表的oID(m.oID)作为另一张表的外键(au.fk_oID)多次存在时,返回行。
目标-建立一个查询以返回所有重复的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))在范围内。
最佳答案
您可以在查询后添加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