首页 > 解决方案 > 如何识别不符合特定标准的组?

问题描述

我正在尝试使用 SQL 生成不包含特定日期的记录列表。我有一个数据库,就这个问题而言,它看起来像这样:

Block House Room Date_Room_Was_Vacuumed
471   96    1    23-MAY-17 01.48.02.000000000 PM
471   96    1    28-SEP-18 04.59.52.000000000 PM
471   95    1    01-JUL-19 08.40.01.274944000 AM
471   95    1    17-AUG-18 04.59.18.000000000 PM

我的工作本质上是查找所有在 2019 年期间没有被吸尘的房间。所以在上表中,我需要编写一个返回 Block 471, House 96, Room 1 的查询——因为两个日期条目都不在2019 年——但不是 471 号楼 95 号房 1 号房间,因为 1 号房间有 2019 年的日期条目。

我的第一个想法是使用 where 子句来消除 2019 年的日期,但这并不能告诉我哪个房间没有任何 2019 年的日期,而只会从视图中消除一条记录。

有人知道我会怎么做吗?

标签: sql

解决方案


不存在还是group by

select block, house, room
from t
group by block, house, room
having sum(case when extract(year from date_room_was_vacuumed) = 2019 then 1 else 0 end) = 0;

推荐阅读