使用MySQL:使用时间戳字段比较表中两个连续记录中的值

时间:2013-01-24 14:45:10

标签: mysql stored-procedures cursor timestamp compare

我有一张桌子 的资料表

(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

2 个答案:

答案 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);