SQL 组范围值
我已经查看了这里的其他几个问题/答案,但我无法将它们应用于我的问题。我试图根据关键列识别多个连续中断。我发现的大多数示例都不会处理同一键列的序列中的多个中断。
Sample data:
Location Number
------------------------
300 15
300 16
300 17
300 18
300 21
300 22
300 23
400 10
400 11
400 14
400 16
Here is the result I am looking for:
Location StartNumber StartNumber
------------------------------------------
300 15 18
300 21 23
400 10 11
400 14 14
400 16 16
I have taken a look at several other questions/answers on here but I cannot apply those to my problem. I am trying to identify multiple sequential breaks based on a key column. Most examples I have found do not deal with multiple breaks in a sequence for the same key column.
Sample data:
Location Number
------------------------
300 15
300 16
300 17
300 18
300 21
300 22
300 23
400 10
400 11
400 14
400 16
Here is the result I am looking for:
Location StartNumber StartNumber
------------------------------------------
300 15 18
300 21 23
400 10 11
400 14 14
400 16 16
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
这是相对可移植的 SQL 解决方案,因为您没有指定数据库
输出
。它是清单 2 的修改版本。用于识别岛屿的基于集合的解决方案。来自序列号中的孤岛和间隙作者:Alexander Kozak
如果您正在寻找 SQL Server 2005 及更高版本的更多选项,您应该搜索短语“Itzik本甘间隙和岛屿"
Here's as relatively portable SQL solution since you didn't specify the DB
Output
Its a modified version of Listing 2. A set-based solution for identifying islands. From Islands and Gaps in Sequential Numbers by Alexander Kozak
If you're looking for more options with SQL Server 2005 and later you should search for the phrase "Itzik Ben-Gan gaps and islands"
好吧,如果您使用的 RDBMS 支持 lag() 函数,那么这应该会告诉您中断在哪里。然后,您应该能够使用它以及一些 case 语句并仔细使用 min() 和 max() 函数来获得您想要的查询。
Well, if you're using an RDBMS that supports the lag() function, then this should tell you where the breaks are. You should then be able to use this, along with some case statements and careful use of the min() and max() functions, to get the query that you want.