我有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)。我们不希望在一天结束时出现多次登录(这种情况有时会在进程未正确启动时发生)。
一般:
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