我有以下查询,当一个表的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))在范围内。
答案 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