sql - 我需要通过一个 sql 查询来实现以下逻辑
问题描述
我有一个带有 Tel_num 列的 master_table。Tel_num 是 11 位数据,如 02365785431。现在,当数字按顺序排列时,我必须将 min 作为 start_num,将 max 作为 end_num,并填充其关联的 line_value。如果出现以下情况:
Tel_num Line_value
023158100001 V1
023158100002 V1
023158100003 V1
023158100004 V1
023158115645 V2
023158111546 V2
023158111547 V2
023158111617 V2
023158121110 V3
023158121111 V3
然后我想要这样的数字
Start_NUM End_NUM Line_Value
023158100001 023158100004 V1
023158115645 023158111547 V2
023158111617 023158111617 V2
023158121110 023158121111 V3
有人可以帮忙吗???
解决方案
这是一种群岛问题。这是使用数字和行号之间的差异的解决方案
select line_value, min(tel_num), max(tel_num)
from (select t.*,
( cast(tel_num as number) -
row_number() over (partition by line_value order by tel_num)
) as grp
from t
) t
group by line_value, grp;
这是有效的,因为当值是连续的时,从值中减去递增序列会tel_num
返回一个常数值。tel_num
这是一个重新测试者。请注意,结果与问题中指定的结果不同,因为 023158115645 不应与任何其他数字组合。
推荐阅读
- html - 如何将日期固定在底部和依赖于文本的文本行中?
- java - List 中所有对角线元素的总和
- > 使用 java 流?
- python - 访问 DataFrameGroupBy 组(用于将它们传递给绘图)
- powerbi - 需要 Power BI 许可证
- javascript - 请使用动态数据帮助 react-pdf/renderer PDFViewer
- spring-kafka - Trace 和 Span 信息默认丢失 SeekToCurrentErrorHandler
- android - Kotlin 协程不等待网络结果返回
- javascript - 如何将 Javascript 字符串转换为对象引用
- javascript - 为什么时刻 js 从索引 0 开始的月份?
- php - 无法设置 SameSite=None PHP 7.4 无错误无警告