一道SQL题

这篇具有很好参考价值的文章主要介绍了一道SQL题。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

有个搞数仓的朋友不知道从哪儿弄了个题。。。
做了做体验了一下。。。
记录记录。
一道SQL题,数据库,sql,数据库

分析

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

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

下面的问题需要处理,

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

第五天:1,2,3,4

保证最后一天做新题的案例:文章来源地址https://www.toymoban.com/news/detail-600350.html

SELECT
	info.user_id 
FROM
(
	SELECT
		two.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 
	FROM
		log_table AS two 
	WHERE
		two.date = "2022-09-23"
	GROUP BY
		two.user_id 
	) info 
WHERE
	info.num >0
补充完善
select
	* 
from (SELECT
	info.user_id 
FROM
(
	SELECT
		two.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 
	FROM
		log_table AS two 
	WHERE
		two.date = "2022-09-23"
	GROUP BY
		two.user_id 
	) info 
WHERE
	info.num >0) as d5 
left join (SELECT
	info.user_id 
FROM
(
	SELECT
		two.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 
	FROM
		log_table AS two 
	WHERE
		two.date = "2022-09-22"
	GROUP BY
		two.user_id 
	) info 
WHERE
	info.num >0) as d4 
on d5.user_id = d4.user_id
left join (SELECT
	info.user_id 
FROM
(
	SELECT
		two.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 
	FROM
		log_table AS two 
	WHERE
		two.date = "2022-09-21"
	GROUP BY
		two.user_id 
	) info 
WHERE
	info.num >0) as d3 
on d5.user_id = d3.user_id
left join (SELECT
	info.user_id 
FROM
(
	SELECT
		two.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 
	FROM
		log_table AS two 
	WHERE
		two.date = "2022-09-20"
	GROUP BY
		two.user_id 
	) info 
WHERE
	info.num >0) as d2 
on d5.user_id = d2.user_id
left join (SELECT
	info.user_id 
FROM
(
	SELECT
		two.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 
	FROM
		log_table AS two 
	WHERE
		two.date = "2022-09-19"
	GROUP BY
		two.user_id 
	) info 
WHERE
	info.num >0) as d1 
on d5.user_id = d1.user_id

到了这里,关于一道SQL题的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • sql 创建sql server数据库文件组

    可以在建立数据库时候创建 如: CREATE DATABASE MyDB ON PRIMARY                           --主文件组和主要数据文件   ( NAME=\\\'MyDB_Primary\\\',    FILENAME= \\\'c:MyDB_Prm.mdf\\\'), FILEGROUP MyDB_FG1                   --用户定义文件组1   ( NAME = \\\'MyDB_FG1_Dat1\\\',    FILENAME = \\\'c:MyDB_FG1_1.ndf\\\'),  --次要数

    2024年02月08日
    浏览(66)
  • 数据库复试—关系数据库标准语言SQL

    SQL:结构化查询语言 以教材中的学生-课程数据库为例进行SQL基础语法的复习 数据库实验环境选择SQLServer 11 学生表Student( Sno ,Sname,Ssex,Sage,Sdept) 课程表Course( Cno ,Cname,Cpno,Ccredit) 学生选课表SC( Sno,Cno ,Grade) 数据建立 学生表数据 学号Sno 姓名 Sname 性别 Ssex 年龄 Sage 所在系 Sdept

    2024年01月24日
    浏览(59)
  • SQL 数据库语句- 创建和管理数据库

    SQL CREATE DATABASE 语句用于创建一个新的 SQL 数据库。 以下 SQL 语句创建了一个名为 \\\"testDB\\\" 的数据库: 通过这个简单的语句,你可以成功地创建一个名为 \\\"testDB\\\" 的数据库。记得在实际应用中,你可能需要添加其他选项,比如指定字符集、校对规则等,以满足具体需求。 SQL DRO

    2024年02月05日
    浏览(81)
  • SQL数据库案例1——创建商店数据库

    创建商店数据库Commodities_Management 创建商品表、供应商表、进货表、销售表 各表分别输入数据 库名:Commodities_Management 字符集:utf16 表一:商品表 字段名 类型 长度 约束 商品编号 varchar 10 外键(参照进货表) 商品名 varchar 30 — 规格 varchar 20 — 供应商编号 varchar 10 非空 表二:

    2024年02月12日
    浏览(48)
  • 【Sql】Sql Server 2008 数据库附加,错误:9004

    【问题描述】 数据库文件存在异常状况,有可能是因为硬盘有坏区引起的。 附加数据库的时候,提示错误9004。 【解决方法】 假设数据库名称为:UFDATA_001_2023 请按顺序执行以下步骤: 1、将数据库的文件名:UFDATA_001_2023复制到别的位置留作备用; 2、新建数据库:UFDATA_001_

    2024年02月15日
    浏览(59)
  • SQL 数据库复制

    当需要将一台机器(源机器)上的一个数据库完全复制到另一台机器(目标机器)上时, 可以选择先在源机器上备份该数据库,然后在目标机器上还原该备份的方法。 在项目搬移到另一个服务器上的时候,可以使用这种方法。我之前搬了个50多G的数据,我就先生成备份,然

    2024年02月03日
    浏览(49)
  • SQL 数据库

    【1】 MySQL安装配置教程(超级详细、保姆级) 【2】 MySQL+Navicat安装配置教程(超级详细、保姆级) 【戴师兄】SQL入门免费教程 刷题链接:https://share.mubu.com/doc/4BHMMbbvIMb 学习笔记:https://share.mubu.com/doc/uf3vg8s5ar 【1】 零基础入门SQL - 知乎 学习笔记: https://mubu.com/doc/6M8yHBsz9lY

    2024年02月11日
    浏览(40)
  • 数据库基础——数据库、数据表和SQL语句

    数据库是用来存储、管理数据的仓库 数据表是数据的存储结构 Structured Query Language,结构化查询语言,用来操作数据库 安装MySQL,自行百度 进入cmd使用命令 mysql -hAddress -uUser -p(Password) 登录数据库 -p后直接回车可进入密文登录 如果出现以下报错,则打开任务管理器-服务-开启

    2024年02月09日
    浏览(74)
  • 数据库期末复习(SQL,范式,数据库设计例题)

    创表 视图 例题:建立一个视图V1,显示老师与学生的授课关系,包括年份,学期,课程名称,老师ID,老师姓名,学生ID,学生姓名 向表中添加或删除约束 添加信息 例题:给“Aufr”同学选上2010年秋季学期的所有课程 删除信息 例题:删除“Comp. Sci.”学院“Ploski”同学,所有

    2024年02月02日
    浏览(65)
  • GaussDB数据库SQL系列-SQL与ETL浅谈

    目录 一、前言 二、SQL与ETL的概述 三、ETL过程中的SQL示例(GaussDB) 1、提取(Extract) 2、转换(Transform) 3、加载(Load) 四、附DataArts Studio介绍 五、小结 在SQL语言中,ETL(抽取、转换和加载)是一种用于将数据从源系统抽取到目标系统的过程。ETL过程通常包括三个阶段:抽

    2024年02月08日
    浏览(58)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包