mysql - MYSQL 插入缺少日期的行
问题描述
我有一个有两列的表:
姓名 | 日期 |
---|---|
AA | 2021-06-01 |
BB | 2021-06-02 |
抄送 | 2021-05-28 |
我想编写一个代码来添加具有名称和日期的行,直到今天(2021-06-03)日期,如下所示:
姓名 | 日期 |
---|---|
AA | 2021-06-01 |
AA | 2021-06-02 |
AA | 2021-06-03 |
BB | 2021-06-02 |
BB | 2021-06-03 |
抄送 | 2021-05-28 |
抄送 | 2021-05-29 |
抄送 | 2021-05-30 |
抄送 | 2021-05-31 |
抄送 | 2021-06-01 |
抄送 | 2021-06-02 |
抄送 | 2021-06-03 |
我没有使用递归函数,所以不确定这里最好的做法是什么。任何正确方向的帮助或指示将不胜感激。谢谢 :)
解决方案
对于最新版本的 MySQL,您可以...
DROP TABLE IF EXISTS my_table;
CREATE TABLE my_table
(name CHAR(2) NOT NULL
,date DATE NOT NULL
,PRIMARY KEY(name,date)
);
INSERT INTO my_table VALUES
('AA','2021-06-01'),
('BB','2021-06-02'),
('CC','2021-05-28');
WITH RECURSIVE cte AS
(
SELECT MIN(date) date FROM my_table
UNION ALL
SELECT date + INTERVAL 1 DAY
FROM cte
WHERE date + INTERVAL 1 DAY <= '2021-06-03'
)
SELECT x.name
, cte.date
FROM my_table x
JOIN cte
ON cte.date >= x.date
ORDER
BY name
, date
| name | date |
| ---- | ---------- |
| AA | 2021-06-01 |
| AA | 2021-06-02 |
| AA | 2021-06-03 |
| BB | 2021-06-02 |
| BB | 2021-06-03 |
| CC | 2021-05-28 |
| CC | 2021-05-29 |
| CC | 2021-05-30 |
| CC | 2021-05-31 |
| CC | 2021-06-01 |
| CC | 2021-06-02 |
| CC | 2021-06-03 |
---
[View on DB Fiddle](https://www.db-fiddle.com/f/wL3ZqXoTqdKftJCPA4um4j/1)
对于旧版本,您可以使用实用程序表。例如,我有一个整数表 (i),其值从 0 到 9...
SELECT y.name
, x.date
FROM
( SELECT MIN(date) + INTERVAL i DAY date FROM my_table,ints GROUP BY i HAVING date <= '2021-06-03' ) x
JOIN my_table y
ON y.date <= x.date
ORDER
BY name
, date;
+------+------------+
| name | date |
+------+------------+
| AA | 2021-06-01 |
| AA | 2021-06-02 |
| AA | 2021-06-03 |
| BB | 2021-06-02 |
| BB | 2021-06-03 |
| CC | 2021-05-28 |
| CC | 2021-05-29 |
| CC | 2021-05-30 |
| CC | 2021-05-31 |
| CC | 2021-06-01 |
| CC | 2021-06-02 |
| CC | 2021-06-03 |
+------+------------+
推荐阅读
- python - 如何在 Python 中从网站中提取引号和作者?
- arrays - 文件位置的bash数组 - 如何找到最后更新的文件?
- cplex - 分配像 GURUBI 这样的 var 类型
- oracle - Tibco SQL 直接查询:报告 JDBC 错误:(SQLState = )-“这不是有效的 SQL 类型:2009
- amazon-web-services - 授权标头代替 x-api-key
- python - tkinter 无法连接到显示器($DISPLAY 问题)
- blazor - 未注册身份验证 AuthenticationStateProvider 的 Blazor Wasm 托管预渲染
- mongodb - 如何为 mongoimport 日期类型格式化 CSV
- r - 向 vistime 图中添加垂直线时的图例
- reactjs - CoreUI React 导航配置