You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SQL如何实现同手机号记录聚合后内部按通话日期升序排序

问题原因及解决方案

为什么现有语句达不到效果

  • 首先你对GROUP BY的使用场景理解有误:GROUP BY是用于聚合计算的语法(比如统计每个手机号的通话总次数、最早通话时间等),你的需求只是将同手机号的记录排列到一起,不需要做聚合计算,加GROUP BY PHONENO,CALLDATE在这里的唯一作用是对查询结果去重,和“归集相同手机号”的需求没有关联。
  • 相同PHONENO没有归集到一起的核心原因是PHONENO为varchar2字符串类型,排序规则与数字不同:字符串排序会逐位对比字符的ASCII码值,即使你存储的内容都是9位整数,如果字段值存在前导空格、非数字隐形字符,就会出现同数值开头的手机号排序分散的问题。

正确写法

如果不需要对重复的<PHONENO, CALLDATE>记录去重,直接去掉多余的GROUP BY,将PHONENO转为数字类型排序即可:

SELECT PHONENO, CALLDATE
FROM TABLE1
ORDER BY CAST(TRIM(PHONENO) AS NUMBER) ASC, CALLDATE ASC

如果确实有去重需求,可以保留GROUP BY,同样按数字类型排序PHONENO:

SELECT PHONENO, CALLDATE
FROM TABLE1
GROUP BY PHONENO, CALLDATE
ORDER BY CAST(TRIM(PHONENO) AS NUMBER) ASC, CALLDATE ASC

内容的提问来源于stack exchange,提问作者JiMZ

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 19:48:02