我有一个像这样的值的表
我使用的是MySQL,第一个字段是日期(TIMESTAMP),第二个是Double
09:00:00 xxx
09:01:00 yyy
09:04:00 zzz
是否可以插入添加缺失的行(09:02:00,09:03:00)?在那种情况下,SQL会是什么样的?
答案 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。否则,您必须指定默认值。