2016-07-11 6 views
0

名前、パブリッシャー、日付のセットを含む一連のデータがあります。SQLite異なる条件でGROUPをフィルタリングする方法

同じ日付に名前が存在するが、重複したサイト運営者がいない場合を見つけようとしています。

私はこのクエリと同じ日付に存在する名前を見つけることができています:

SELECT * FROM list GROUP BY date HAVING COUNT(*) >= 2 

しかし、私は1グループ化された日付内でユニークな出版社を持っている名前を表示するかどうかはわかりません。頭に浮かぶ何

は次のようにサブクエリを使用している:

SELECT * FROM list WHERE datething IN (
    SELECT datething FROM list GROUP BY date HAVING COUNT(*) >= 2) 
GROUP BY publisher HAVING COUNT(*) == 1 

が、これは、彼らが一日ごとに1つのエントリを持っていた場合でも、すべての出版社を除去する効果があります。 2016年7月10日のために

例えば

..

Name | pub  | datething 
Arr | Yoda  | 2016-07-09 
Foo | Akbar  | 2016-07-10 
Bar | Akbar  | 2016-07-10 
Baz | Leia  | 2016-07-10 
Far | Luke  | 2016-07-10 
Bar2 | Akbar  | 2016-07-11 
Baz2 | Leia  | 2016-07-11 
Foo2 | Leia  | 2016-07-11 
Far2 | Luke  | 2016-07-11 

fooとbarが同じ出版社によってあるbecasue、私は、バズと極東を見ることを期待。

2016-07-11の場合、私はBar2とFar2が見えます。

2016-07-09にはエントリが1つしかないので、私は何も見る予定はありません。

しかし、外側のGROUP BY句のため、結果は0です。複数のパブリッシャがあります。

何か助けていただければ幸いです。

ありがとうございます!

答えて

2

2番目のフィルタが機能するには、データとパブリッシャでグループ化する必要があります。

SELECT * 
    FROM list 
WHERE datething IN (
      SELECT datething 
      FROM list 
      GROUP BY datething 
      HAVING COUNT(*) > 2 
     ) 
GROUP BY datething, 
      pub 
HAVING COUNT(*) == 1; 
関連する問題