我有一组数据,其中包含一组名称,发布者和日期。
我正在尝试查找同一日期存在名称但没有重复发布者的情况。
我能够找到与此查询在同一日期存在的名称:
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个发布者。
感谢任何帮助。
谢谢!
答案 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;