首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Sqlite在特定时间范围内去重

问Sqlite在特定时间范围内去重
EN

Stack Overflow用户
提问于 2019-11-27 16:29:10
回答 1查看 58关注 0票数 1

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

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

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

代码语言:javascript
复制
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上的条目包含相同的数据,这些数据是重复的,应该删除,因此只保留一个条目(任何条目都可以,确切时间不是主要问题)。"No“列是一个纯粹的任意数字,可以安全地忽略。其他条目应该保持原样。

我知道这应该通过使用"Group by“来完成,但我正在为如何编写条件而苦苦挣扎。我也尝试过使用表内部连接本身,然后删除这些选定的结果:

代码语言:javascript
复制
     T2.A = T2.B AND  
     T2.[Date] > T1.[Date] AND
     strftime('%s',T2.[Date]) - strftime('%s',T1.[Date]) < 600 

结果似乎仍然有点差,因为一些条目被选择了两次,而另一些条目没有被选中。我仍然不习惯SQL的思维方式。任何帮助都是非常感谢的。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-11-27 17:20:48

Date列的格式使事情有点复杂,但除此之外,解决方案基本上是以正常的方式使用GROUP BY。在下面的代码中,我假设该表的名称为test

代码语言:javascript
复制
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()可能是不必要的,但它提供了一些确定性,这可能会有所帮助。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59066007

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档