查找一组 n 个连续数字是不是在 SQL 中重复

Posted

技术标签:

【中文标题】查找一组 n 个连续数字是不是在 SQL 中重复【英文标题】:finding if group of n consecutive numbers are repeating in SQL查找一组 n 个连续数字是否在 SQL 中重复 【发布时间】:2020-03-22 15:39:28 【问题描述】:

我想知道一组 n 个连续数字是否针对特定分区重复。

假设我有 deviceIds 和一些 recordid,它们的值是连续的,设备生成的每条记录都增加 1。

所以我想知道是否重置recordid 并再次以相同的顺序重新生成记录。让我们通过下表来理解。

Device ID        recordid             DateTime
--------------------------------------------------
07777778999       2               18-12-2016 17:15
07777778123       10              18-12-2016 18:10
07777778123       10              18-12-2016 18:20
07777778999       3               19-12-2016 19:30
07777778999       4               19-12-2016 12:15
07777778999       5               19-12-2016 13:15
07777778999       6               20-12-2016 11:15
07777778123       11               20-12-2016 9:15
07777778123       12               20-12-2016 17:15
07777778123       13               20-12-2016 17:25
07777778123       14               20-12-2016 17:35
07777778999       7                20-12-2016 17:45
07777778999       8               20-12-2016 17:55
07777778999       4               20-12-2016 18:50
07777778999       5               20-12-2016 18:55 
07777778999       6               20-12-2016 18:50
07777778999       7               20-12-2016 18:55
...

有很多设备,因此我们可以按设备对其进行分区,然后应用我们的查询来查找设备是否会重新生成数字,例如 07777778999,我们的记录 ID 为 2、3、4、5、6、7 ,8 然后从 4,5,6,7 等重新生成数字。

所以我想列出所有使用 SQL 重新生成的设备。 所以上面的预期输出是设备 07777778999

【问题讨论】:

你试过用左连接吗? 我没有得到这个 '07777778999,我们有记录 id's 2,3,4,5,6,7,8' 然后'数字是从 4,5,6,7 重新生成的' - 由于第二批没有开始 2,3 并且没有 8 你有什么逻辑说 07777778999 应该是预期的输出?难道仅仅是recordid被多次使用了吗?在这种情况下会包括 07777778123(但你说你不想要那个)? 是的,记录值按顺序重复。如果您看到 778123,它的 10,10,11,12,13,14 但对于 7778999,它的 2,3,4,5,6,7,8,4,5,6,7... 它继续在 7 之后有 8、9、10、11、12、13 等,基本上第一个序列停止,然后第二个序列从 4 开始并继续。它基本上是一个数据分析问题,我们试图识别记录 id 重新生成并将自身重置为某个值并启动的设备 我想知道提供更简单的数据集是否会丢失任何东西。例如,99 和 23 更简单。 【参考方案1】:

试试这个。

这将返回所有具有重新生成值的记录。

SELECT DeviceID,RecordId
FROM ResultSet
GROUP BY DeviceID,RecordId
HAVING COUNT(1)>1;

【讨论】:

这没有给出序列。它只提供与该设备 ID 重复的记录。假设一条记录复制了自己,那么该设备将被列出 @230490,您能否提供一些预期的输出。 所以在上面的例子中,它的设备是 07777778999 而不是设备 07777778123,虽然它有 10 个重复的记录

以上是关于查找一组 n 个连续数字是不是在 SQL 中重复的主要内容,如果未能解决你的问题,请参考以下文章

在 O(1) 空间中的数组中查找重复元素(数字不在任何范围内)

使用 sqlite 查找连续重复的数量

在表格里如何找到重复的数据?

用SQL计算同一个字符(汉字、字母、数字、表情、符号)连续重复出现的次数

在非常大的数据集中查找重复项 [重复]

excel判断表数据是不是存在另一个表中