【 TiDB 使用环境】生产环境
【 TiDB 版本】
【复现路径】做过哪些操作出现的问题
【遇到的问题:问题现象及影响】
【资源配置】进入到 TiDB Dashboard -集群信息 (Cluster Info) -主机(Hosts) 截图此页面
【附件:截图/日志/监控】
需求查询根据人对日期的自增
date是一个输入值
举例
初始数据:
名字 开始时间 结束时间
AAA 2021-01-01 2021-01-03
BBB 2021-01-02 2021-01-04
要求你生成数据:
名字 时间
AAA 2021-01-01
AAA 2021-01-02
AAA 2021-01-03
BBB 2021-01-02
BBB 2021-01-03
BBB 2021-01-04
就是要创建一个临时表,然后根据id和日期插入数据,日期给了开始日期和结束日期,
mysql是可以循环插入实现的
WalterWj
(王军 - PingCAP)
8
听起来是个存储过程?调用是 call id,start_time,end_time 生成这个表咯?
小龙虾爱大龙虾
(Minghao Ren)
11
没太听懂你需求,看起来是:
初始数据:
名字 开始时间 结束时间
AAA 2021-01-01 2021-01-03
BBB 2021-01-02 2021-01-04
要求你生成数据:
名字 时间
AAA 2021-01-01
AAA 2021-01-02
AAA 2021-01-03
BBB 2021-01-02
BBB 2021-01-03
BBB 2021-01-04
如果是这个需求的话,可以使用递归CTE实现,但是递归不建议太深,否则你就用程序实现吧
又见识了一个奇奇怪怪的需求,靠数据库自身实现不了。
猜题大赛,你这种使用程序实现吧,查出每个人的最大值,自增就可以,可以尝试一下窗口函数
WalterWj
(王军 - PingCAP)
18
-- 创建表
CREATE TABLE your_table (
名字 VARCHAR(255),
开始时间 DATE,
结束时间 DATE
);
-- 插入数据
INSERT INTO your_table (名字, 开始时间, 结束时间) VALUES
('AAA', '2021-01-01', '2021-01-03'),
('BBB', '2021-01-02', '2021-01-04');
-- 使用递归 CTE 生成所需数据
WITH RECURSIVE DateRanges AS (
SELECT 名字, 开始时间 AS 时间, 结束时间
FROM your_table
UNION ALL
SELECT 名字, DATE_ADD(时间, INTERVAL 1 DAY), 结束时间
FROM DateRanges
WHERE 时间 < 结束时间
)
SELECT 名字, 时间 FROM DateRanges
ORDER BY 名字, 时间;
+--------+------------+
| 名字 | 时间 |
+--------+------------+
| AAA | 2021-01-01 |
| AAA | 2021-01-02 |
| AAA | 2021-01-03 |
| BBB | 2021-01-02 |
| BBB | 2021-01-03 |
| BBB | 2021-01-04 |
+--------+------------+
6 rows in set (0.01 sec)
5 个赞
vincentLi
(Ti D Ber X5 H Em4hc)
21
看你是不是这样的需求,awk处理这些数据应该不难。