新农上路
- 积分
- 96
- 大米
- 颗
- 鳄梨
- 个
- 水井
- 尺
- 蓝莓
- 颗
- 萝卜
- 根
- 小米
- 粒
- 学分
- 个
- 注册时间
- 2018-10-18
- 最后登录
- 1970-1-1
|
本帖最后由 zk2424 于 2019-8-29 10:51 编辑
select t1.submission_date,count(t1.hacker_id) from
(Select DATEDIFF(a.submission_date,'2016-03-01')+1 as n,a.submission_date,a.hacker_id,count(distinct b.submission_date) as d
from submissions a
left join submissions b
on a.hacker_id=b.hacker_id where a.submission_date>=b.submission_date
group by a.submission_date,a.hacker_id)t1 where n=d group by submission_date
我只写了你要求的这个部分,剩下那个每天最多提交次数的就再写个query join过去就行了你应该懂就不写了。
思路就是,对某个日期下的某个ID,统计其在这个日期之前的日子里至少提交一次的天数,如果这个天数与总天数相等,就说明这个ID每天都至少提交了一次。
这是在join后,第一次group之前,之后group就是把右边所有天数count一下
这是第一次group之后,最左边栏的天数等于最右边栏的天数的ID就是目标ID
然后再group一次,把每个日期中左边天数和右边天数相等的ID数一下就是最后结果,当然这只是答案的左半边部分,右半边部分你需要再join一个query
|
|