我想找到所有每天至少提交一次的黑客。
表格如下:id,date。
1, 2016-01-01
2, 2016-01-01
3, 2016-01-01
1, 2016-01-02
2, 2016-01-02
1, 2016-01-03
所以输出应该是: 1 由于1已全天提交。
我试过的是:
Select id from table
group by id
having count(*)=3 /* Since number of days are 3 */
然而这是不正确的,因为黑客可以在一天内进行多次提交。 我的查询失败的示例:
1, 2016-01-01
2, 2016-01-01
3, 2016-01-01
3, 2016-01-01
3, 2016-01-01
1, 2016-01-02
2, 2016-01-02
1, 2016-01-03
解决这个问题后,最初的问题是:
编写一个查询,以打印每天至少提交的唯一黑客的总数(从比赛的第一天开始),并找到每天提交最大数量的黑客的hacker_id和名称。如果不止一个这样的黑客拥有最大提交数量,请打印最低的hacker_id。查询应该在比赛的每一天打印此信息,按日期排序
答案 0 :(得分:2)
我相信,如果您按id
和date
分组,您将获得所需内容。即:
SELECT id
FROM table
GROUP BY id, `date`
HAVING COUNT(*) = 3 /* Since number of days are 3 */
请注意,这假设您根据其他地方的某个日期范围获得天数(在这种情况下为3天)。
答案 1 :(得分:0)
我会这样说:
select id
from t
group by id
having count(distinct date) = (select count(distinct date) from t);