有两个表: client
以及 contract
.
客户端表:
client_code INT pk
status VARCHAR
一个客户可以有一个或多个合同。客户端有一个状态列,指定它是否具有有效的协定-值为“active”或“inactive”。为处于活动状态的客户机指定合同。
合同表:
contract_code INT pk
client_code INT pk
end_date DATE
合同有终止日期。今天之前的合同结束日期是过期合同。
要求:报表要求所有活动客户都有合同,但所有(不是某些)合同都已过期。一些示例数据如下所示:
客户数据:
client_code status
----------------------------------
1 active
2 inactive
3 active
4 active
合同数据:
contract_code client_code end_date
-------------------------------------------------------------
11 1 08-12-2018
12 1 09-12-2018
13 1 10-12-2018
31 3 11-31-2018
32 3 10-30-2018
41 4 01-31-2019
42 4 12-31-2018
预期结果:
client_code
-------------
1
结果:此客户机(客户机代码=1)具有所有过期日期的合同: 08-12-2018
, 09-12-2018
以及 10-12-2018
.
我需要一些帮助来编写一个sql查询来获得这个结果。我不确定我必须使用什么结构-可以指出我可以尝试什么。数据库是mysql 5.5。
2条答案
按热度按时间kfgdxczn1#
这就是你要找的吗?
smtd7mpg2#
一种方法使用聚合。我们可以一起
client
以及contract
表,然后按客户机聚合,检查对于活动客户机,是否不存在将来发生的合同结束日期。演示
注意:我假设你的日期出现在
M-D-Y
仅仅是由于特定的格式而格式化end_date
实际上是一个合适的日期列。如果您将日期存储为文本,那么我们可能需要致电STR_TO_DATE
先把它们转换成日期。