使用默认值在中间添加行

时间:2014-03-10 09:48:52

标签: mysql sql

我有一个像这样的值的表

我使用的是MySQL,第一个字段是日期(TIMESTAMP),第二个是Double

09:00:00 xxx
09:01:00 yyy
09:04:00 zzz

是否可以插入添加缺失的行(09:02:00,09:03:00)?在那种情况下,SQL会是什么样的?

2 个答案:

答案 0 :(得分:0)

您可以直接通过查询和alter table插入,以按日期顺序排列数据

INSERT INTO tbl values('09:02:00', 'AAA'), ('09:03:00', 'BBB');
ALTER tbl ORDER BY date;

答案 1 :(得分:0)

创建一个将所有必要值插入临时表的过程。像这样:

DROP PROCEDURE IF EXISTS sp_date_range;
DELIMITER $$
CREATE PROCEDURE sp_date_range(IN startdate datetime, IN enddate datetime)
BEGIN
DROP TABLE IF EXISTS tmp_date_range;
CREATE TABLE tmp_date_range(a_datetime datetime primary key);

SET @date := startdate;

WHILE (@date <= enddate) DO
INSERT INTO tmp_date_range VALUES (@date);
SET @date := @date + INTERVAL 1 MINUTE;
END WHILE;

END $$
DELIMITER ;

现在用开始日期和结束日期来调用它。

CALL sp_date_range('2014-03-10 14:00:00', NOW());

现在你有一个这样的表:

mysql> SELECT * FROM tmp_date_range;
+---------------------+
| a_date              |
+---------------------+
| 2014-03-10 14:00:00 |
| 2014-03-10 14:01:00 |
| 2014-03-10 14:02:00 |
| 2014-03-10 14:03:00 |
| 2014-03-10 14:04:00 |
| 2014-03-10 14:05:00 |
| 2014-03-10 14:06:00 |
| 2014-03-10 14:07:00 |
| 2014-03-10 14:08:00 |
| 2014-03-10 14:09:00 |
| 2014-03-10 14:10:00 |
| 2014-03-10 14:11:00 |
| 2014-03-10 14:12:00 |
| 2014-03-10 14:13:00 |
| 2014-03-10 14:14:00 |
| 2014-03-10 14:15:00 |
| 2014-03-10 14:16:00 |
| 2014-03-10 14:17:00 |
| 2014-03-10 14:18:00 |
| 2014-03-10 14:19:00 |
+---------------------+

现在您插入缺少的值,如下所示:

INSERT INTO your_table (your_timestamp_column)
SELECT a.a_datetime
FROM tmp_date_range a
LEFT JOIN your_table b ON a.a_datetime = b.your_timestamp_column
WHERE b.your_timestamp_column IS NULL;

但请注意,我假设您表中的其他列是NULLable。否则,您必须指定默认值。