获取具有升序值的行数,如 1,2,3,直到发生中断,如表中的 1,2,3,7,8,9,10
Posted
技术标签:
【中文标题】获取具有升序值的行数,如 1,2,3,直到发生中断,如表中的 1,2,3,7,8,9,10【英文标题】:Get count of rows having values in ascending sequence like 1,2,3 until a break occurs like 1,2,3,7,8,9,10 from table 【发布时间】:2021-11-27 12:54:36 【问题描述】:ip_available 表数据为:
ip_address | parent |
---|---|
10010010024 | 1987 |
10010010026 | 1987 |
10010010027 | 1987 |
10010010033 | 1987 |
10010010034 | 1987 |
10010010035 | 1987 |
10010010036 | 1987 |
10010010037 | 1987 |
10010010090 | 2010 |
类似地,还有更多具有其他父值的 ip_addresses
我想要这样的结果集
ip_address_min | parent | count |
---|---|---|
10010010024 | 1987 | 3 |
10010010033 | 1987 | 5 |
10010010090 | 2010 | 1 |
数据库是 mysql 每个常规序列都应该计数,无论父值是否重复。
【问题讨论】:
这是Gaps&Island-Problem。如果您可以指定您的 MySQL 版本(例如,如果您使用 MySQL 8 或不使用),将会有所帮助。 【参考方案1】:更多细节会在下次有所帮助,例如包括您的表格结构。 但我相信这会对你有所帮助。
SELECT MIN(ip_address) as ip_address_min, MIN(parent) as parent, COUNT(ip_address) as count
FROM ip_available
GROUP BY LEFT(ip_address,length(ip_address)-1);
https://www.db-fiddle.com/f/5dw4hvSfLm5idNjknrj6YX/0
【讨论】:
如果数字跨越不同的 10 位(例如 ....39、.....40),这将不起作用。 @slashroot - 谢谢,它成功了!以上是关于获取具有升序值的行数,如 1,2,3,直到发生中断,如表中的 1,2,3,7,8,9,10的主要内容,如果未能解决你的问题,请参考以下文章