一道SQL题

news/2024/11/17 5:56:15/

有个搞数仓的朋友不知道从哪儿弄了个题。。。
做了做体验了一下。。。
记录记录。
在这里插入图片描述

分析

要保证每天都要做新题
5天必须都做题,不然GG
最后一天必须做新题,如果最后一天做新题了,前面那几天没做新题,做的是老题

最后一天,如果没做题会被踢出
最后一天做的题,不是新题记录0,当求和之后为0,说明没有新题,那就踢出
如果是最后一天做了新题,第四天没做新题

下面的问题需要处理,

用户a,前四天(1,2,3)
第一天:1,2,3
第二天:1,2,3
第三天:1,2,3
第四天:1,2,3

第五天:1,2,3,4

保证最后一天做新题的案例:

SELECTinfo.user_id 
FROM
(SELECTtwo.user_id,sum(IF(two.question_id IN ( SELECT DISTINCT one.question_id FROM log_table AS one WHERE one.date between "2022-09-19" and "2022-09-22" AND one.user_id = two.user_id ),0,1 )) AS num FROMlog_table AS two WHEREtwo.date = "2022-09-23"GROUP BYtwo.user_id ) info 
WHEREinfo.num >0

补充完善

select* 
from (SELECTinfo.user_id 
FROM
(SELECTtwo.user_id,sum(IF(two.question_id IN ( SELECT DISTINCT one.question_id FROM log_table AS one WHERE one.date between "2022-09-19" and "2022-09-22" AND one.user_id = two.user_id ),0,1 )) AS num FROMlog_table AS two WHEREtwo.date = "2022-09-23"GROUP BYtwo.user_id ) info 
WHEREinfo.num >0) as d5 
left join (SELECTinfo.user_id 
FROM
(SELECTtwo.user_id,sum(IF(two.question_id IN ( SELECT DISTINCT one.question_id FROM log_table AS one WHERE one.date between "2022-09-19" and "2022-09-21" AND one.user_id = two.user_id ),0,1 )) AS num FROMlog_table AS two WHEREtwo.date = "2022-09-22"GROUP BYtwo.user_id ) info 
WHEREinfo.num >0) as d4 
on d5.user_id = d4.user_id
left join (SELECTinfo.user_id 
FROM
(SELECTtwo.user_id,sum(IF(two.question_id IN ( SELECT DISTINCT one.question_id FROM log_table AS one WHERE one.date between "2022-09-19" and "2022-09-20" AND one.user_id = two.user_id ),0,1 )) AS num FROMlog_table AS two WHEREtwo.date = "2022-09-21"GROUP BYtwo.user_id ) info 
WHEREinfo.num >0) as d3 
on d5.user_id = d3.user_id
left join (SELECTinfo.user_id 
FROM
(SELECTtwo.user_id,sum(IF(two.question_id IN ( SELECT DISTINCT one.question_id FROM log_table AS one WHERE one.date between "2022-09-19" and "2022-09-19" AND one.user_id = two.user_id ),0,1 )) AS num FROMlog_table AS two WHEREtwo.date = "2022-09-20"GROUP BYtwo.user_id ) info 
WHEREinfo.num >0) as d2 
on d5.user_id = d2.user_id
left join (SELECTinfo.user_id 
FROM
(SELECTtwo.user_id,sum(IF(two.question_id IN ( SELECT DISTINCT one.question_id FROM log_table AS one WHERE one.date between "2022-09-18" and "2022-09-18" AND one.user_id = two.user_id ),0,1 )) AS num FROMlog_table AS two WHEREtwo.date = "2022-09-19"GROUP BYtwo.user_id ) info 
WHEREinfo.num >0) as d1 
on d5.user_id = d1.user_id

http://www.ppmy.cn/news/956473.html

相关文章

漫画科普ChatGPT:绝不欺负文科生

图文原创:亲爱的数据 你所热爱的,都值得拥有一个名字。 世界上里程碑式计算机,问世之时大多拥有自己的名字。 我认为,假如计算机的诞生是元年,下一个元年将会是“奇点”。 不是比特币,不是虚拟现实&…

山东大学教授团畅谈ChatGPT革命座谈会,探讨ChatGPT发展趋势

2月18日,由山东大学多院系教授学者组成的山东大学教授团在济南福瑞达自贸创新产业园举行了“畅谈ChatGPT革命”座谈会,诸位教授学者就ChatGPT出现的影响进行了探讨。 产业园首席顾问李铁岗教授向大家介绍产业园区 山东大学经济学院教授、济南福瑞达自贸创…

域内信息收集

将网络中多台计算机逻辑上组织到一起进行集中管理,这种区别于工作组的逻辑环境叫 做域。域是由域控制器(Domain Controller)和成员计算机组成,域控制器就是安装了活动 目录(Active Directory)的计算机。活动目录提供了存储网络上对象信息并使用网络使用该…

Linux搭建node环境-MobaXterm+node+pm2安装

1.登录session 2.安装X11-forwarding 我也不知道这个有什么用,但是有个叉叉在那里有点难受,就把它解决了什么是X11-forwarding?怎么使用? yum install xorg-x11-xauth xorg-x11-fonts-* xorg-x11-font-utils xorg-x11-fonts-Ty…

【java】泛型与Object的区别,如何在实际场景中选择泛型以及Object

泛型与Object的区别&#xff0c;如何在实际场景中选择泛型以及Object 简介什么是泛型泛型的作用泛型与Object类有什么区别实际场景中该如何选择泛型案例1、创建泛型类案例2、使用泛型定义工具类&#xff08;解决缓存穿透&#xff09;案例3、集合类使用不确定泛型"<?&g…

OpenMP并行化傅里叶变换

设计思想 傅里叶变换&#xff0c;表示能将满足一定条件的某个函数表示成三角函数&#xff08;正弦和/或余弦函数&#xff09;或者它们的积分的线性组合。在不同的研究领域&#xff0c;傅里叶变换具有多种不同的变体形式&#xff0c;如连续傅里叶变换和离散傅里叶变换。 快速傅…

未来不会使用chatgpt的人会被淘汰,那么国内不用梯子如何使用chatgpt?

ChatGPT 可以在提高工作效率方面提供多方面的帮助。以下是其中的一些例子&#xff1a; 时间管理&#xff1a;通过使用 ChatGPT&#xff0c;你可以设置提醒事项&#xff0c;安排会议&#xff0c;以及进行其他与时间管理相关的任务。 研究和信息收集&#xff1a;ChatGPT 可以用来…

echarts 地图点击常见问题

echats 散点图不支持缩放 echarts 地图点击激活label如何去除 高德loca 1.4版本热力图报错 绘制的颜色区间是 0 --1 高德地图销毁不生效 自己傻逼&#xff0c;每次没有清空数组导致叠加数据&#xff0c;约点数据越多。 为何用高德地图district.search查询不到别的省数据&…