2017-08-08 27 views
2

私はMySQlデータベースで作業しており、私たちのインベントリの追跡システムのようなものを持っています。デバイスのインベントリ番号、取得した人、取得したとき、返された日。返された列がnullの場合、その人はまだデバイスを持っています。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

をフィルタリングする必要があとがき私は別々に行う方法を知っているが、GROUP BY後、彼は常に最初の行ではなくnullのものを取るので、私はWHEREを使用することはできません。

私の問題を理解して助けてくれることを願っています。

+0

は、あなたがこれまでにあなたのコードを提供することができますか?あなたはすでに部品を持っているなら、サブクエリ – RealCheeseLord

答えて

2

これはNULLである行が1つもない場合はすべての数値を返します。クイックリマインダ:WHEREはフィルタグループを持つ行をフィルタリングします。

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

でこれが私の問題を解決したように思えるかもしれません。あなたMihaiありがとう! – 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`;