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)をデータに挿入したいので、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 秒ずつ進むと想定しています。また、1 回の呼び出しで複数の行を挿入することは決してないと想定しています。

それ以外の場合は、可能性をどのように処理したいかについて、さらに情報を提供する必要があります。

-- 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 に答える