2017-08-08 69 views
2

我正在使用MySQl数据库,并且有类似于我们的invetory的跟踪系统。随着设备的inventoryNumber,获得它的人,获得它的时间以及返回它的时间。如果返回的列为空,那么该人仍然拥有该设备。MySQL,GROUP BY中的过滤器

|InventoryNumber | user | receive | returned | 
+----------------+-------+------------+------------+ 
| X1    | Mark | 2017-01-01 | 2017-01-03 | 
| X1    | Mark | 2017-01-03 | null  | 
| X2    | Frank | 2017-01-01 | null  | 

现在我想知道哪些设备未使用。所以首先我要GROUP BY InventoryNumber但是“显示”null。后记我有过滤WHERE returned IS NOT NULL

我知道该怎么做seperately,但GROUP BY后,他始终站在第一排,而不是一个与null,所以我不能用WHERE

我希望你能理解我的问题并能帮助我。

+0

你可以提供你的代码这么远?如果你已经有零件,应该可以用子查询 – RealCheeseLord

回答

2

这将返回没有一行为NULL的所有数字。快速提醒:WHERE过滤HAVING过滤器组的行。

SELECT InventoryNumber 
GROUP BY InventoryNumber 
HAVING SUM(returned IS NULL)=0 
+1

看起来像这样解决了我的问题。谢谢米海! – noctua

1

您可以使用子查询与NOT IN,例如:

SELECT * 
FROM table 
WHERE returned IS NOT NULL 
AND InventoryNumber NOT IN (
    SELECT InventoryNumber 
    FROM table 
    WHERE returned IS NULL 
); 
+0

我想避免多个select语句。不过谢谢你。 – noctua

0

你可以试试这个:

select 
`InventoryNumber` 
from 
`track` 
where 
`returned` is NOT NULL 
group by `InventoryNumber`;