首页 > 解决方案 > MySQL - 使用 where、count 和 have 两个表的 SQL 选择查询

问题描述

有两个表:clientcontract

客户表:

client_code INT pk
status      VARCHAR

一个客户可以有一份或多份合同。客户端有一个状态列,它指定它是否有有效的合同 - 值是“活动”或“非活动”。该合同是为具有活动状态的客户指定的。

合同表:

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

结果:此客户 (client_code = 1) 拥有所有到期日期的合同08-12-201809-12-201810-12-2018

我需要一些帮助来编写 SQL 查询以获得此结果。我不确定我必须使用什么构造 - 可以指出我可以尝试什么。数据库是 MySQL 5.5。

标签: mysqlsqlselect

解决方案


那是你要找的吗?

select clients.client_code
from clients
join contracts
on contracts.client_code=clients.client_code
where status='active'
group by clients.client_code
having min(end_date)>curdate() 

推荐阅读