我在一家生产微芯片的工厂工作。
微芯片是以10,000个为一批制造的,其制造的最后阶段涉及到它们通过一台以各种方式检查它们的机器。
下图所示为批次ID 1402361301中1号微芯片的样本表。
| 批号|微芯片系列|检查_ID|地位|
| --|--|--|--|
| 1402361301 | 1 | 35 | 1 |
| 1402361301 | 1 | 36 | 1 |
| 1402361301 | 1 | 37 | 1 |
| 1402361301 | 1 | 38 | 1 |
| 1402361301 | 1 | 39 | 1 |
| 1402361301 | 1 | 40 | 1 |
| 1402361301 | 1 | 41 | 1 |
| 1402361301 | 1 | 42 | 1 |
| 1402361301 | 1 | 43 | 1 |
| 1402361301 | 1 | 52 | 1 |
| 1402361301 | 1 | 53 | 1 |
| 1402361301 | 1 | 49 | 1 |
从表中可以看出,共有12个检查ID。最后一个是Inspection_ID 49。
据我所知,任何状态为1且Inspection_ID为49的Microchip都应该有其他11个Inspection。
如何使用SQL显示状态为1且检查ID为49的条目缺少这11个检查中的任何一个?
(额外提示:我可以选择缺少所有11项检验、缺少任何1项检验或缺少1项特定检验的条目吗?)
2条答案
按热度按时间q5lcpyga1#
您可以使用
GROUP BY
和HAVING
并使用条件聚合来查找具有正确检验和状态的批次及其检验计数:如果要查找检验数为49且状态为1的批次,且检验数少于12:
如果您想检查是否缺少特定检查,则:
3zwtqj6y2#
交叉连接检查与已完成的检查。然后使用
NOT EXISTS
查找表中缺少的检查。我希望有一个检查表,因为您有一个名为inspection_id的列。如果没有,则在数据库中创建一个one-the-fly或。如果存在检查表,但它包含其他检查ID,则使用另一个CTE仅选择所需的ID。