SQL 难点解决:序列生成

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
云数据库 RDS PostgreSQL,集群系列 2核4GB
简介:

1、 生成连续整数序列
MySQL8: with recursive t(n) as (
select 1
union all
select n+1 from t where n<7
)
select * from t;

Oracle:select level n
from dual connect by level<=7;

集算器 SPL:
1
A1:构造从 1 到 7 的整数序列
2

示例 1:百鸡问题,鸡翁一值钱五,鸡母一值钱三,鸡雏三值钱一。百钱买百鸡,问鸡翁、母、雏各几
MySQL8:
with recursive jg(n) as (select 1 union all select n+1 from jg where n<100/5),
jm(n) as (select 1 union all select n+1 from jm where n<100/3),
jc(n) as (select 3 union all select n+3 from jc where n<98)
select jg.n jw, jm.n jm, jc.n jc
from jg cross join jm cross join jc
where jg.n5+jm.n3+jc.n/3=100 and jg.n+jm.n+jc.n=100

集算器 SPL:
3
A1:构造1到20的整数序列
A2:构造1到33的整数序列
A3:构造1到99且步长为3的整数序列
A4:创建数据结构为(jw,jm,jc)的序表
A5:对A1、A2、A3的数据进行嵌套循环,若满足于A1成员+A2成员+A3成员==100且A1成员5+A2成员3+A3成员/3==100则追加到A4序表中
4
示例2:将指定列中冒号分隔的串划分成多行
Oracle:
with t(k,f) as (select 1 , 'a1:a2:a3' from dual
union all select 2, 'b1:b2' from dual),
t1 as (select k,f, length(f)-length(replace(f,':',''))+1 cnt from t),
t2 as (select level n from dual connect by level<=(select max(cnt) from t1)),
t3 as (select t1.k, t1.f, n, cnt,
case when n=1 then 1 else instr(f,':',1,n-1)+1 end p1,
case when n=cnt then length(f)+1 else instr(f,':',1,n) end p2
from t1 join t2 on t2.n<=t1.cnt)
select k,substr(f,p1,p2-p1) f from t3 order by k;

集算器 SPL:
5
A1:创建数据结构为(k,f)的序表,并追加2条记录(1, “a1:a2:a3)和(2,”b1:b2”)
A2:将A1的字段f用冒号划分成序列并重新赋值给字段f
A3:针对A1每条记录构造数据结构为(k,f)的序表,并根据字段f中成员构造记录(A1.k,f成员)追加到此序表中
6

2、 生成连续日期序列
MySQL8:
with recursive
t(d) as (select date'2018-10-03'
union all
select d+1 from t where dselect d,dayofweek(d) w from t;

集算器 SPL:
7
A1:生成2018-10-03到2018-10-09的日期序列
8

示例:列出2015-01-03到2015-01-07每天的销量汇总
MySQL8:
with recursive
t(d,v) as (select date'2015-01-04',30
union all select date'2015-01-06',50
union all select date'2015-01-07',50
union all select date'2015-01-03',40
union all select date'2015-01-04', 80),
s(d) as (select date'2015-01-03'
union all
select d+1 from s where dselect s.d, sum(t.v) v
from s left join t on s.d=t.d
group by s.d;

集算器 SPL:
9
A4:A2中记录按字段d的值对齐到A3
A5:根据A4和A3对位构造统计后的序表
10
3、 生成连续的工作日(不包含周六周日)序列
MySQL8:
with recursive
t(d) as (select date'2018-10-03'
union all
select d+1 from t where dselect d,dayofweek(d) w from t
where dayofweek(d)<=5;

集算器 SPL:
11
A1:构造从2018-10-03到2018-10-09不包含周六周日的日期序列

   A2:根据A1构造日期及相应周几的序表

12
4、 根据序列生成表
MySQL8:
with recursive t1(n) as (select 1 union all select n+1 from t1 where n<14),
t2(n, name) as (select n, concat('a',n) name from t1)
select max(if(n%4=1, name, null)) f1,
max(if(n%4=2, name, null)) f2,
max(if(n%4=3, name, null)) f3,
max(if(n%4=0, name, null)) f4
from t2
group by floor((n+3)/4);

集算器 SPL:
13
14

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
4月前
|
SQL
解锁 SQL Server 2022的时间序列数据功能
【7月更文挑战第14天】要解锁SQL Server 2022的时间序列数据功能,可使用`generate_series`函数生成整数序列,例如:`SELECT value FROM generate_series(1, 10)。此外,`date_bucket`函数能按指定间隔(如周)对日期时间值分组,这些工具结合窗口函数和其他时间日期函数,能高效处理和分析时间序列数据。更多信息请参考官方文档和技术资料。
|
3月前
|
SQL 存储 数据管理
解锁 SQL Server 2022的时间序列数据功能
【8月更文挑战第14天】解锁SQL Server 2022的时间序列数据功能需先确认版本支持;接着创建数据库与含时间列的表,如`TimeSeriesData`;然后插入时间序列数据;利用内置函数如窗口函数计算移动平均等统计;最后针对大数据量配置索引及分区以优化性能。这流程助力高效处理时间序列数据。
|
4月前
|
SQL 索引
业务系统架构实践问题之想要再SQL代码中生成递增序列,那么步骤问题如何解决
业务系统架构实践问题之想要再SQL代码中生成递增序列,那么步骤问题如何解决
|
4月前
|
SQL Oracle Java
SQL中使用NEXTVAL获取序列值
SQL中使用NEXTVAL获取序列值
|
5月前
|
SQL Oracle 关系型数据库
SQL中NEXTVAL获取序列值的应用场景与示例
SQL中NEXTVAL获取序列值的应用场景与示例
|
Oracle 关系型数据库 数据库
nested exception is java.sql.SQLSyntaxErrorException: ORA-02289: 序列不存在(详细讲解)
nested exception is java.sql.SQLSyntaxErrorException: ORA-02289: 序列不存在(详细讲解)
329 0
|
SQL
SQL面试题:按照时间序列补全数据
HiveSQL面试题,根据时间以最新数据补全字段缺失值
636 0
|
SQL 分布式计算 Java
MaxCompute 挑战使用SQL进行序列数据处理
MaxCompute 挑战使用SQL进行序列数据处理 --而不是用MR和函数
2723 1
MaxCompute 挑战使用SQL进行序列数据处理
|
SQL 移动开发 数据库