MySQL,在 GROUP BY 中筛选

MySQL, filter in GROUP BY

我正在开发一个 MySQl 数据库,并且有一个类似库存跟踪系统的东西。带有设备的库存编号,领取人,领取时间,归还时间。如果返回的列为空,则该人仍然拥有该设备。

|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 但 "show" null。后记我必须过滤 WHERE returned IS NOT NULL

我知道如何单独做到这一点,但在 GROUP BY 之后他总是占据第一行而不是带有 null 的那一行,所以我不能使用 WHERE .

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

这将 return 所有没有一行为 NULL 的数字。快速提醒:WHERE 筛选行 HAVING 筛选组。

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

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

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

你可以试试这个:

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