我有一张桌子
CREATE TABLE consumer_occurrence_restoration_times (
consumer_id INT,
start_time TIMESTAMP,
end_time TIMESTAMP
);
数据在哪里
INSERT INTO consumer_occurrence_restoration_times (consumer_id, start_time, end_time)
VALUES
(1, '2023-09-24 20:00:00', '2023-09-25 12:00:00'),
(2, '2023-09-24 21:00:00', '2023-09-25 13:00:00'),
(1, '2023-09-26 20:00:00', '2023-09-28 02:00:00'),
(3, '2023-09-25 19:00:00', '2023-09-26 10:00:00'),
(4, '2023-09-25 21:30:00', '2023-09-27 14:00:00'),
(5, '2023-09-25 21:30:00', '2023-09-25 22:00:00')
我想将此数据插入到另一个表tbl_diburaction using a query中,以便它插入一天的数据,即,开始时间与结束时间发生在同一天,而不是在第二天的00:00:00小时之后.
CREATE TABLE tbl_bifurcation (
consumer_id INT,
start_time TIMESTAMP,
end_time TIMESTAMP,
isdaydiff INT
);
Consumer_ocurence_RESTORE_TIMES表具有如下数据:
consumer_id start_time end_time
1 2023-09-24 20:00:00 2023-09-25 00:00:00
2 2023-09-24 21:00:00 2023-09-25 13:00:00
1 2023-09-26 20:00:00 2023-09-28 02:00:00
3 2023-09-25 19:00:00 2023-09-26 10:00:00
5 2023-09-25 21:30:00 2023-09-25 22:00:00
INSERT查询将来自Consumer_ocurence_Restore_Times表的数据插入到另一个名为tbl_diburtion的表中.但是,考虑从START_TIME到END_TIME的一天,它需要将时间间隔拆分成单独的日期,并将它们作为单独的行插入. 此外,如果某些数据的开始时间为‘2023-09-26 20:00:00’,结束时间为‘2023-09-27 20:00:00’,则isday diff为1,但当结束时间为‘2023-09-27 00:00:00’时,isday diff仍为0. 例如,如果START_TIME为‘2023-09-26 20:00:00’,END_TIME为‘2023-09-28 02:00:00’,我希望在tbl_diburaction中插入如下行:
consumer_id | start_time | end_time | isdaydiff |
---|---|---|---|
1 | 2023-09-24 20:00:00 | 2023-09-25 00:00:00 | 0 |
2 | 2023-09-24 21:00:00 | 2023-09-25 00:00:00 | 1 |
2 | 2023-09-25 00:00:00 | 2023-09-25 13:00:00 | 1 |
1 | 2023-09-26 20:00:00 | 2023-09-27 02:00:00 | 1 |
1 | 2023-09-27 02:00:00 | 2023-09-28 00:00:00 | 1 |
1 | 2023-09-28 00:00:00 | 2023-09-28 02:00:00 | 1 |
3 | 2023-09-25 19:00:00 | 2023-09-26 00:00:00 | 1 |
3 | 2023-09-26 00:00:00 | 2023-09-26 10:00:00 | 1 |
5 | 2023-09-25 21:30:00 | 2023-09-25 22:00:00 | 0 |
这里,当分支完成时,isday sdiff=1(在除第一行和最后一行之外的所有行中),而不是在所有情况下.
Condition for updating isdaydiff个
Isday diff=0仅用于开始日期和结束日期的Forking ,并且仅当开始日期和结束日期不在同一天时才进行Forking .它与Consumer_id无关.无论任何数据,每一行都是单独的行,与前一行没有任何问题.但是,只有当下一行中的Start_Date大于或等于具有相同Consumer_id的前一行end_date时,同一使用者才会有不同的行.
为bifuracted_query添加了小提琴链接