查找一组 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) 空间中的数组中查找重复元素(数字不在任何范围内)