(startTime, endTime, data)
例如,
startTime | endTime | data
2000-01-01 03:00:00 | 2000-01-01 03:00:10 | 88
2000-01-01 03:00:10 | 2000-01-01 03:00:20 | 33
2000-01-01 03:00:30 | 2000-01-01 03:00:40 | 67 ......and so on
我想在没有数据的情况下将条目(2000-01-01 03:00:20,2000-01-01 03:00:30,0
)插入数据中,因此输出为: -
startTime | endTime | data
2000-01-01 03:00:00 | 2000-01-01 03:00:10 | 88
2000-01-01 03:00:10 | 2000-01-01 03:00:20 | 33
**2000-01-01 03:00:20 | 2000-01-01 03:00:30 | 0**
2000-01-01 03:00:30 | 2000-01-01 03:00:40 | 67 ..... and so on
最简单的方法是什么。
我今天需要它,或者我的老板会杀了我。
多谢你们。
有没有办法检查前一行的endTime是否等于当前行的startTime并相应地插入表中?
更多信息: -
这是我现在使用的存储过程来累积来自inputTable并使用10秒间隔将其存储到输出表中。 http://sqlfiddle.com/#!2/838de/1
答案 0 :(得分:0)
只需插入记录并创建一个视图
SELECT * FROM tableData ORDER BY startTime ASC, endTime ASC;
答案 1 :(得分:0)
这是一个例子。
我假设每个新记录大于或等于表中最大的endTime
,每个记录提前10秒。我还假设你永远不会在一次通话中插入多行。
否则,您仍需要提供有关如何处理可能性的更多信息。
-- DROP PROCEDURE IF EXISTS addRecord;
DELIMITER //
CREATE PROCEDURE addRecord(startT TIMESTAMP, endT TIMESTAMP, rowData INT)
BEGIN
DECLARE lastEndTime TIMESTAMP;
SET lastEndTime = (SELECT MAX(`endTime`) FROM tableData);
WHILE lastEndTime < startT DO
INSERT INTO tableData (`startTime`,`endTime`,`data`)
VALUES (lastEndTime,DATE_ADD(lastEndTime, INTERVAL 10 SECOND),0);
SET lastEndTime = DATE_ADD(lastEndTime, INTERVAL 10 SECOND);
END WHILE;
INSERT INTO `tableData` (`startTime`,`endTime`,`data`)
VALUES (startT,endT,rowData);
END //
要打电话给这个......
CALL addRecord('2000-01-01 03:00:50','2000-01-01 03:01:00',23);