本文分享的这段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