如何在一个read语句中读取mySQL表中的多个字符串和日期?
我有一个类似以下示例的mySQL表:如何在一个read语句中读取mySQL表中的多个字符串和日期?,mysql,date,datetime,select,having-clause,Mysql,Date,Datetime,Select,Having Clause,我有一个类似以下示例的mySQL表: DOC_OwnerID DOC_type DOC_start_date DOC_end_date 100 JANUARY 1/1/2017 12/31/2018 100 JANUARY 1/1/2018 12/31/2019 100 DRIVER 1/5/2018 1/4/2019 100
DOC_OwnerID DOC_type DOC_start_date DOC_end_date
100 JANUARY 1/1/2017 12/31/2018
100 JANUARY 1/1/2018 12/31/2019
100 DRIVER 1/5/2018 1/4/2019
100 LICENSE 2/5/2015 2/5/2016
100 LICENSE 4/5/2018 2/5/2019
200 JANUARY 1/2/2017 1/2/2018
200 DRIVER 1/2/2018 1/2/2019
在我的应用程序逻辑中,我需要找到每个给定时间段的所有人(DOC_OwnerID)都有三个基本的强制文档(一月、司机、驾照)。计数3是显示所有者有三份文件所必需的。(每个时间段的文档名称都是唯一的)
例如:OwnerID=100,日期=2018年4月9日
true => 100 JANUARY 1/1/2018 12/31/2019
true => 100 DRIVER 1/5/2018 1/4/2019
true => 100 LICENSE 4/5/2018 2/5/2019
应返回3以显示所有三个文档在给定日期内有效。我可以使用COUNT,但我如何选择记录,因为DPC_类型不是唯一的
但owner=200永远不会是真的,因为他没有许可证记录
我可以在我的应用程序中通过读取所有者的所有记录来实现这一点。如何在sql中立即执行此操作
谢谢,
Pubudu您可以使用聚合:
SELECT DOC_OwnerID
FROM mytable
WHERE @mydate >= DOC_start_date AND @mydate <= DOC_end_date
GROUP BY DOC_OwnerID
HAVING
MAX(DOC_type = 'JANUARY') = 1
AND MAX(DOC_type = 'DRIVER') = 1
AND MAX(DOC_type = 'LICENSE') = 1
选择文档所有者ID
从mytable
其中@mydate>=DOC\u start\u date和@mydate您希望返回表中的所有有效行,对吗
因此,您必须在获得满足表中条件的doc\u owner\u id
s后加入结果:
select t.*
from tablename t inner join (
select doc_owner_id
from tablename
where
str_to_date('4/9/2018', '%m/%d/%Y') between doc_start_date and doc_end_date
and
doc_type in ('JANUARY', 'DRIVER', 'LICENCE')
group by doc_owner_id
having count(distinct doc_type) = 3
) g on g.doc_owner_id = t.doc_owner_id
where
str_to_date('4/9/2018', '%m/%d/%Y') between t.doc_start_date and t.doc_end_date
and
t.doc_type in ('JANUARY', 'DRIVER', 'LICENCE')
您希望输出什么?谢谢。拥有是关键。是否可以在运行时从另一个表中读取doc_类型并获得相同的内容?单据类型将根据所有者的不同而变化。