我在一家生产微芯片的工厂工作。我们每批生产10,000个微芯片。其中一台处理微芯片批次的机器称为“分配”。有30台这样的“分配”机器-名为分配1,分配2,分配28等。
如果在处理微芯片时出现问题,这些机器通常会发出警报。不同的警报会被分配不同的“代码”。
因此,报警代码1可能是“关闭开关仍然打开”。报警代码2可能是“防护门仍然打开”等。
在一个理想的世界里,所有的配药机都应该有一套相同的报警代码,但事实并非如此。
例如,它们是分配1唯一的某些报警代码,不会出现在其他分配机器上。
报警数据被输入到名为“dispense_status”的表中,如下所示:
| 机|报警码|运行时间戳|批号|
| --|--|--|--|
| 分配_1| 1 |2019 -07- 21 14:32| 1000585855 |
| 分配_23| 4 |2019 -09- 21 12:34| 1000585856 |
| 分配_9| 7 |2019 -08- 21 13:33| 1000456789 |
| 分配_1| 2 |2019 -09- 21 15:00:00| 1000223774 |
| 分配_9| 2 |2018 -05- 21 12:34| 1000374590 |
在上表中,报警代码1是分配1的唯一代码。报警代码2也出现在分配1上,但它不是分配1的唯一代码,因为该alarm_code也出现在分配9上。
如果我写:
SELECT DISTINCT ALARM_CODE
FROM DISPENSE_STATUS
WHERE MACHINE = DISPENSE_1
ORDER BY ALARM_CODE
字符串
这将给我给予:
| 报警码|
| --|
| 1 |
| 2 |
但我只想要报警代码1,因为这是分配1唯一的报警代码。
(报警代码2也发生在分配9时)。
什么是SQL查询,以便给予分配1唯一的报警代码?
3条答案
按热度按时间wqsoz72f1#
您可以使用HAVING子句来检查它是否在多台计算机上发生,并检查该事件是否仅限于该特定计算机:
字符串
rekjcdws2#
使用带子查询的SQL查询将Dispense_1的报警代码与其他机器的报警代码进行比较:
字符串
我们从SELECT DISTINCT语句开始,检索Dispense_1的唯一报警代码。我们在子查询中使用NOT EXISTS检查具有相同报警代码但位于不同计算机上的任何其他记录(ds2)。如果没有此类记录,则意味着报警代码对于Dispense_1是唯一的。
cu6pst1q3#
一个有点被遗忘的特性,
EXCEPT
:字符串