2

我有一个表 tableData

(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在没有数据时将 entry() 插入数据中,因此为 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

4

2 回答 2

0

只需插入记录并创建一个视图

SELECT * FROM tableData ORDER BY startTime ASC, endTime ASC;
于 2013-01-24T15:11:51.110 回答
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 //

叫这个……</p>

CALL addRecord('2000-01-01 03:00:50','2000-01-01 03:01:00',23);
于 2013-01-25T06:13:13.717 回答