mysql - MySQL - 使用 where、count 和 have 两个表的 SQL 选择查询
问题描述
有两个表:client
和contract
。
客户表:
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-2018
:09-12-2018
和10-12-2018
。
我需要一些帮助来编写 SQL 查询以获得此结果。我不确定我必须使用什么构造 - 可以指出我可以尝试什么。数据库是 MySQL 5.5。
解决方案
那是你要找的吗?
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()
推荐阅读
- peoplesoft - 如何清除 PeopleSoft 批准流程的所有事务?使用 SQL
- java - 如何在tomcat服务器中集成angular6 + spring boot
- database - Temenos T24 数据库结构
- python - 找出数据集的均值和趋势的 Python 代码
- php - 不要在 optgroup 选项中显示相同的值
- coordinates - 如何获得二维线上的点(坐标)?
- windows - Docker postgresql 在 Windows 操作系统上恢复
- php - Json 键值与否?
- constants - 如何使 Simulink 模型保持不变?
- java - java.lang.ClassCastException 在休眠 4 中使用投影时