日常工作中经验要与数据库打交道,我们用的较多的是mysql。下面一段代码个人认为对于维护来说还是有必要了解,虽然有时候我更愿意select 保存成文件后再用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脚本:原理很简单,就是依据record表处理所有的用户的录音文件(清除指定日期前的录音文件(保留最后一条))
因为要保留用户的最后一条记录,所以没办法用简单清除脚本。
附清除录音文件的脚本:
http://blog.chinaunix.net/uid-27050514-id-3839699.html
阅读(4146) | 评论(0) | 转发(0) |