gpt4 book ai didi

sqlite - SQLite在特定时间范围内删除重复项

转载 作者:行者123 更新时间:2023-12-01 02:03:47 25 4
gpt4 key购买 nike

我知道有很多关于在SQL中删除重复项的问题。但是就我而言,它稍微复杂一些。

这些是带有条形码的数据,该数据将重复一个月。因此,预计会有带有相同条形码的条目。但是,发现由于可能的机器故障,相同的数据将在2到3次的4-5分钟内记录下来。并非每个条目都发生这种情况,但是它经常发生。

请允许我用包含相同条形码“ A00000”的示例表进行演示

Barcode No      Date                A    B   C       D
A00000 1499456 10/10/2019 3:28 607 94 1743 72D
A00000 1803564 10/20/2019 22:09 589 75 1677 14D
A00000 1803666 10/20/2019 22:13 589 75 1677 14D
A00000 1803751 10/20/2019 22:17 589 75 1677 14D
A00000 2084561 10/30/2019 12:22 583 86 1677 14D
A00000 2383742 11/9/2019 23:18 594 81 1650 07D



如您所见,10/20上的条目包含相同的数据,这些数据是重复数据,应将其删除,因此仅保留其中一个条目(任何一个条目都可以,并且确切的时间不是主要问题)。 “否”列是可以任意忽略的纯任意数字。其他条目应保持原样。

我知道应该使用“分组依据”来完成此操作,但是我在如何编写条件方面苦苦挣扎。我也尝试过使用表INNER JOIN本身,然后删除这些选定的结果:

     T2.A = T2.B AND  
T2.[Date] > T1.[Date] AND
strftime('%s',T2.[Date]) - strftime('%s',T1.[Date]) < 600


由于某些条目被选择了两次,而某些未被选中,因此结果似乎仍然有些偏离。我仍然不习惯SQL风格的思维。任何帮助表示赞赏。

最佳答案

Date列的格式使事情有些复杂,但是否则,解决方案基本上是按常规方式使用GROUP BY。在下面,我假设表的名称为test

WITH sane as
(SELECT *,
substr(date,1,instr(date, ' ') - 1) as time
FROM test)
SELECT Barcode, max(No), Date, A, B, C, D
FROM sane
GROUP BY barcode, time;


可能不需要使用max(),但是它提供了确定性,这可能会有所帮助。

关于sqlite - SQLite在特定时间范围内删除重复项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59066007/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com