Chinaunix首页 | 论坛 | 博客
  • 博客访问: 240072
  • 博文数量: 37
  • 博客积分: 325
  • 博客等级: 一等列兵
  • 技术积分: 1199
  • 用 户 组: 普通用户
  • 注册时间: 2012-06-09 00:04
个人简介

坚持原创,虽然有些东西很简单,但也算是一种积累。

文章分类

全部博文(37)

文章存档

2013年(28)

2012年(9)

我的朋友

分类: Mysql/postgreSQL

2013-08-08 13:06:50

日常工作中经验要与数据库打交道,我们用的较多的是mysql。下面一段代码个人认为对于维护来说还是有必要了解,虽然有时候我更愿意select 保存成文件后再用awk处理。
代码如下:
目标:按主叫取出(符合要求)有一条以上录音文件的记录。

点击(此处)折叠或打开

  1. select SUBSTR(callno,1,INSTR(callno,'#')-1) as callno, count(*) from record
  2. where delflag =0 and begin_time < (now() - INTERVAL 10 DAY) and imported = 1
  3. group by SUBSTR(callno ,1,INSTR(callno,'#')-1) having count(*) > 1;


先说下几个字段:

  1.     callno:主叫(手机/固话)#被叫    --很无语主被叫不分开
  2.     delflag:录音文件是否已被处理的标志,这是我后面写的一个定期清除录音文件脚本需要的一个字段。
  3.     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条的记录

如果要汇总有多少数据的话加个子查询:
点击(此处)折叠或打开
  1. select count(*) from (select SUBSTR(callno,1,INSTR(callno,'#')-1) as callno, count(*) from record
  2. where delflag =0 and begin_time < (now() - INTERVAL 10 DAY) and imported = 1
  3. 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) |
给主人留下些什么吧!~~