mysql基于重复集和时间删除一些条目

问题描述 投票:0回答:1

我有2个应用程序在编写输入日志位置和输出日志位置。我想要输入和输出对。

有时input-Log Location会更新两次,但我们应该只使用最新的一次。

示例:

input_log x1 Time1
input_log X1 Time2
out_log   X1 Time3.

这里应该更新我的表以删除input_log x1 Time1,因为我们在表中仅需要给定X1的input_log和out_putlog。如果新的input_log在output_log之后,则不应删除。

我能够创建一个表,添加时间并按时间排序。我在解决如何保持条件以便将这些东西移除的问题。

CREATE TABLE MyTable(ID INTEGER ,Name TEXT,State TEXT,Timestamp DATETIME DEFAULT (STRFTIME('%Y-%m-%d %H:%M:%f', 'NOW')));


insert into MyTable (ID,Name,state) values (12,"name1","IN");
insert into MyTable (ID,Name,state) values (13,"name2","IN");
insert into MyTable (ID,Name,state) values (14,"name3","IN");
insert into MyTable (ID,Name,state) values (14,"name3","IN");
insert into MyTable (ID,Name,state) values (12,"name1","OUT");
insert into MyTable (ID,Name,state) values (13,"name2","OUT");
insert into MyTable (ID,Name,state) values (14,"name3","OUT");

[基本上,我在启动时的应用程序进程将更新日志位置(inlog)。并更新退出日志位置(outlog)。我们不希望在一天结束时出现多次登录(这种情况有时会在进程未正确启动时发生)。

mysql
1个回答
0
投票

一般:

WITH cte AS ( SELECT *, 
                     ROW_NUMBER() OVER (PARTITION BY ID, Name, state 
                                        ORDER BY Timestamp DESC) rn
              FROM MyTable )
DELETE MyTable.*
FROM MyTable
JOIN cte USING (ID, Name, state)
WHERE cte.rn > 1
© www.soinside.com 2019 - 2024. All rights reserved.