tidb可以写自增这种吗?

【 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

没看懂这个需求。

没插入一个personid ,date自增?

对,所以我问这个tidb要怎么实现

就是要创建一个临时表,然后根据id和日期插入数据,日期给了开始日期和结束日期,
mysql是可以循环插入实现的

mysql 里面你使用存储过程实现的类似的功能吧

听起来是个存储过程?调用是 call id,start_time,end_time 生成这个表咯?

chatgpt回复的,但是tidb不支持存储过程

所以我的问题就是可不可以不用存储过程

没太听懂你需求,看起来是:
初始数据:
名字 开始时间 结束时间
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实现,但是递归不建议太深,否则你就用程序实现吧

建议在代码层面实现,性能还好

没听懂啥玩意儿

又见识了一个奇奇怪怪的需求,靠数据库自身实现不了。

对就是这个需求

猜题大赛,你这种使用程序实现吧,查出每个人的最大值,自增就可以,可以尝试一下窗口函数

能给链接让我学习下吗?

-- 创建表
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 个赞

看了答案才猜到题主意思 :rofl:

看你是不是这样的需求,awk处理这些数据应该不难。

这个好用感觉