MySQL生成日期序列与表关联的 SQL 查询

1、内部日期序列生成

首先,让我们看一下内部日期序列的生成部分。这部分的作用是创建从 2024 年 4 月 1 日开始的日期序列,直到 2024 年 12 月 31 日。SQL 使用 DATE_ADD 函数和一个嵌套的子查询来生成这个日期序列。

sql 复制代码
SELECT DATE_ADD('2024-04-01', INTERVAL seq.seq DAY) AS DATE
FROM (
    SELECT (t3.num*100 + t2.num*10 + t1.num) AS seq
    FROM (SELECT 0 AS num UNION SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9) AS t1,
         (SELECT 0 AS num UNION SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9) AS t2,
         (SELECT 0 AS num UNION SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9) AS t3
) AS seq
WHERE DATE_ADD('2024-04-01', INTERVAL seq.seq DAY) <= '2024-12-31';

2、外部表关联

接下来,我们将日期序列与 yonghu 表进行连接。在这个例子中,连接条件是一个始终为真的条件 1=1,这将导致日期序列中的每个日期与 yonghu 表中的所有行进行连接。

sql 复制代码
SELECT dates.date, yonghu.姓名, yonghu.国家, yonghu.`id2`
FROM (
    -- 上面的日期序列生成查询
) AS dates
JOIN yonghu ON 1=1;

3、结果分析

最终的结果将包含从 2024 年 4 月 1 日到 2024 年 12 月 31 日的每一天,以及 yonghu 表中每一行的姓名、国家和 id2 列的数据。这种连接方式会生成一个笛卡尔积,因为日期序列中的每个日期都会与 yonghu 表中的所有行进行匹配。

4、完整代码

sql 复制代码
SELECT dates.date, yonghu.姓名, yonghu.国家,yonghu.`id2`
FROM (
    SELECT DATE_ADD('2024-04-01', INTERVAL seq.seq DAY) AS DATE
    FROM (
        SELECT (t3.num*100 + t2.num*10 + t1.num) AS seq
        FROM (SELECT 0 AS num UNION SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9) AS t1,
             (SELECT 0 AS num UNION SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9) AS t2,
             (SELECT 0 AS num UNION SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9) AS t3
    ) AS seq
    WHERE DATE_ADD('2024-04-01', INTERVAL seq.seq DAY) <= '2024-12-31'
) AS dates
JOIN yonghu ON 1=1; 
相关推荐
q_19132846954 分钟前
基于SpringBoot+Vue.js的教师绩效考核管理系统
vue.js·spring boot·笔记·后端·mysql·毕业设计
航Hang*6 分钟前
第3章:复习篇——第5-2节:数据库编程2
数据库·笔记·sql·mysql·sqlserver
islandzzzz7 分钟前
SQL学习应用工作场景(2)--执行优先级+语法顺序+保留2位小数
数据库·sql·学习
开开心心_Every7 分钟前
定时管理进程:防止沉迷电脑的软件推荐
xml·java·运维·服务器·网络·数据库·excel
hopsky8 分钟前
SQL语义校验方案
数据库·oracle
几度风雨见丹心9 分钟前
uniapp项目使用sqlite数据库
数据库·sqlite·uni-app
航Hang*10 分钟前
第3章:复习篇——第5-1节:数据库编程1
数据库·笔记·sql·mysql·sqlserver
Mr.朱鹏10 分钟前
分布式接口幂等性实战指南【完整版】
java·spring boot·分布式·sql·spring·云原生·幂等
一个天蝎座 白勺 程序猿12 分钟前
破局困境:Oracle迁移金仓KingbaseES数据库的深度实践
数据库·sql·oracle·kingbase·kingbasees·金仓数据库
航Hang*13 分钟前
第3章:复习篇——第6节:数据库安全管理与日常维护
数据库·笔记·sql·mysql