替换第一表中的值已更新的第二表中的值的最佳方法?

时间:2018-08-01 14:54:54

标签: mysql

im试图查找最后一次将值输入表1,然后将该值输入表2的过程 但是由于表1的庞大(每天都会被截断),它要么花了很长时间,要么最终失去了与服务器的连接

我尝试使用插入后触发器,但是它将运行,然后创建了一个每隔几个小时运行一次的事件,但是在第一次运行后再次运行。

我当前使用的查询是

replace into database.table2 (value1,value2,date,time)
select value1,value2,date,time from database.table1;

值1是一个唯一值,这是使用replace的原因,因为我只需要该值的1个实例(字符串)。

示例数据表1

----------------------------------------------------
| Value1 | Value2       | DATE          | TIME     |
--------------------------------------------------
| 1      | red          | 01/08/2018    | 10:33:15 |
| 2      | red          | 01/08/2018    | 10:33:20 |
| 3      | red          | 01/08/2018    | 10:33:21 |
| 4      | red          | 01/08/2018    | 10:33:23 |
| 1      | red          | 01/08/2018    | 10:36:15 |
| 1      | red          | 01/08/2018    | 10:38:15 |
| 2      | red          | 01/08/2018    | 10:38:15 |
----------------------------------------------------

示例数据Table2的预期结果,其中从table1取来的值是表中的最新值

----------------------------------------------------
| Value1 | Value2       | DATE          | TIME     |
--------------------------------------------------
| 1      | red          | 01/08/2018    | 10:38:15 |
| 2      | red          | 01/08/2018    | 10:38:15 |
| 3      | red          | 01/08/2018    | 10:33:21 |
| 4      | red          | 01/08/2018    | 10:33:23 |
----------------------------------------------------


CREATE TABLE table1 (

value1 int primary key,
value2 varchar(10),
Date date,
Time time
);

INSERT INTO table1 (value1,value2, Date, Time)
Values (1, 'red', '2018-08-01', '10:33:15' ),
(2, 'red', '2018-08-01', '10:33:20' );
(3, 'red', '2018-08-01', '10:33:21' );
(4, 'red', '2018-08-01', '10:33:23' );
(1, 'red', '2018-08-01', '10:36:15' );
(1, 'red', '2018-08-01', '10:18:15' );
(2, 'red', '2018-08-01', '10:38:15' );



CREATE TABLE table2 (

value1 varchar(10) primary key,
value2 varchar(10),
Date date,
Time time
);

希望我已经正确地编写了这些内容,因为我通常使用工作台来创建表

2 个答案:

答案 0 :(得分:0)

不是答案;评论太久了。

让我们从目前唯一有意义的一点开始:

INSERT INTO Test (id,present,datetime) VALUES
(1, 'red', '2018-08-01 10:33:15' ),
(2, 'red', '2018-08-01 10:33:20' );
(3, 'red', '2018-08-01 10:33:21' );
(4, 'red', '2018-08-01 10:33:23' );
(1, 'red', '2018-08-01 10:36:15' );
(1, 'red', '2018-08-01 10:18:15' );
(2, 'red', '2018-08-01 10:38:15' );

此数据集没有主键。在我们进行下一步之前,需要一个。

答案 1 :(得分:0)

要查找最新值,您可以执行以下操作

/kafka/data/broker-N

然后将其与您的SELECT t1.value1, t1.value2, t1.date, t1.time FROM table1 t1 LEFT JOIN table1 t2 ON (t1.value1 = t2.value1 AND concat(t1.date,' ',t1.time) < concat(t2.date,' ',t2.time)) WHERE t2.date IS NULL;

一起使用
Replace

提琴:http://sqlfiddle.com/#!9/dbbc27/1 参考:https://stackoverflow.com/a/1313293/2397717