我知道在SQL中有很多关于删除重复项的问题。然而,在我的例子中,它稍微复杂一些。
这些是重复一个月以上的条形码数据。因此,预计会有具有相同条形码的条目。然而,由于可能是机器故障,相同的数据将在4-5分钟内被记录2到3次。并不是每个条目都会发生这种情况,但这种情况经常发生。
请允许我使用包含相同条形码"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上的条目包含相同的数据,这些数据是重复的,应该删除,因此只保留一个条目(任何条目都可以,确切时间不是主要问题)。"No“列是一个纯粹的任意数字,可以安全地忽略。其他条目应该保持原样。
我知道这应该通过使用"Group by“来完成,但我正在为如何编写条件而苦苦挣扎。我也尝试过使用表内部连接本身,然后删除这些选定的结果:
T2.A = T2.B AND
T2.[Date] > T1.[Date] AND
strftime('%s',T2.[Date]) - strftime('%s',T1.[Date]) < 600 结果似乎仍然有点差,因为一些条目被选择了两次,而另一些条目没有被选中。我仍然不习惯SQL的思维方式。任何帮助都是非常感谢的。
发布于 2019-11-27 17:20:48
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()可能是不必要的,但它提供了一些确定性,这可能会有所帮助。
https://stackoverflow.com/questions/59066007
复制相似问题