一段主被叫信息的mysql sql代码解析

发布时间:2020-01-31编辑:脚本学堂
分享一段mysql代码,保存着主被叫的手机号码信息,本节做下简单解析,感兴趣的朋友可以参考学习下。

本文分享的这段mysql代码,个人觉得对于维护来说还是有必要了解,虽然有时更愿意select 保存成文件后再用linuxjishu/13830.html target=_blank class=infotextkey>awk处理。

代码:
目标:按主叫取出(符合要求)有一条以上录音文件的记录。
 

复制代码 代码示例:
select SUBSTR(callno,1,INSTR(callno,'#')-1) as callno, count(*) from record
where delflag =0 and begin_time < (now() - INTERVAL 10 DAY) and imported = 1
group by SUBSTR(callno ,1,INSTR(callno,'#')-1) having count(*) > 1;

几个字段:
    callno:主叫(手机/固话)#被叫    --很无语主被叫不分开
    delflag:录音文件是否已被处理的标志,这是我后面写的一个定期清除录音文件脚本需要的一个字段。
    imported:录音文件是否被用户下载过。

解析: 
 

SUBSTR(callno,1,INSTR(callno,'#')-1)             #取callno字段1至第一个#之间的字符,因为主叫位数不定
begin_time < (now() - INTERVAL 10 DAY)           #只处理10天之前的数据
group by SUBSTR(callno ,1,INSTR(callno,'#')-1)   #按截取出的主叫group by
having count(*) > 1                              #取count(*)大于1条的记录

如果要汇总有多少数据的话加个子查询:
 

复制代码 代码示例:
select count(*) from (select SUBSTR(callno,1,INSTR(callno,'#')-1) as callno, count(*) from record
where delflag =0 and begin_time < (now() - INTERVAL 10 DAY) and imported = 1
group by SUBSTR(callno ,1,INSTR(callno,'#')-1) having count(*) > 1)a;

注意:得加个无用的别名。

备注:虽然这段代码很简单,但运维过程中会经常用到,也许有人的方法更简单。

接下业会介绍下,关于清除录音文件的一个shell/ target=_blank class=infotextkey>shell脚本:原理很简单,就是依据record表处理所有的用户的录音文件(清除指定日期前的录音文件(保留最后一条))
因为要保留用户的最后一条记录,所以没办法用简单清除脚本。

附,清除录音文件的脚本:
http://www.jb200.com/article/13870.html