MySQL,在GROUP BY中过滤

时间:2017-08-08 09:13:49

标签: mysql grouping where

我正在开发一个MySQl数据库,并为我们的invetory提供类似跟踪系统的功能。使用设备的inventoryNumber,获得它的人,当他得到它以及何时返回它。如果返回的列为null,则该人员仍具有该设备。

|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

我知道如何单独执行此操作,但在GROUP BY后,他始终使用第一行而不是null的那一行,因此我无法使用WHERE。< / p>

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

3 个答案:

答案 0 :(得分:2)

这将返回没有单行的所有数字,即NULL。快速提醒:WHERE过滤具有过滤器组的行。

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

答案 1 :(得分:1)

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

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

答案 2 :(得分:0)

你可以试试这个:

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