SQLite如何使用不同的条件过滤GROUP

时间:2016-07-11 01:49:18

标签: sqlite

我有一组数据,其中包含一组名称,发布者和日期。

我正在尝试查找同一日期存在名称但没有重复发布者的情况。

我能够找到与此查询在同一日期存在的名称:

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

但是,我不确定如何在一个分组日期内显示具有唯一发布者的名称。

我想到的是使用如下的子查询:

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

但这可以消除所有发布者,即使他们一天只有一个条目。

例如......

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

2016-07-10,我希望看到Baz和Far,因为Foo和Bar是同一个出版商。

2016-07-11,我希望看到Bar2和Far2。

我不希望在2016-07-09看到任何内容,因为那里只有一个条目。

但是,由于外部GROUP BY子句,我得到0结果 - 有超过1个发布者。

感谢任何帮助。

谢谢!

1 个答案:

答案 0 :(得分:2)

您需要按日期和发布商对第二个过滤器进行分组才能正常工作。

SELECT *
  FROM list
 WHERE datething IN (
           SELECT datething
             FROM list
            GROUP BY datething
           HAVING COUNT( * ) > 2
       )
 GROUP BY datething,
          pub
HAVING COUNT( * ) == 1;