oracle数据库中按机构抽取2条邮件的SQL写法
2015-12-09 10:37
435 查看
iamlaosong文
客服需要抽取妥投邮件进行回访,为了保证抽取的覆盖率,要求每个机构抽取几条,然后进行回访,语句如下:
select d.city, d.ssxs, d.zj_code, d.zj_mc, c.dlv_date,c.mail_num, c.dlv_sts_code
from tb_evt_dlv c, sncn_zd_jg d
where c.dlv_date = to_date('2015-12-7', 'yyyy-mm-dd')
and c.dlv_sts_code = 'I'
and c.dlv_bureau_org_code = d.zj_code
and c.mail_num in (select t.mail_num
from tb_evt_dlv t
where t.dlv_date = to_date('2015-12-7', 'yyyy-mm-dd')
and t.dlv_sts_code = 'I'
and t.dlv_bureau_org_code = c.dlv_bureau_org_code
and rownum <= 2)
order by d.zj_code;
上述语句是随机抽取的,由于我们是对虚假信息进行抽查,为了提高准确度,就需要对信息进行筛选,比如抽取下段和妥投时间间隔过小的邮件,语句如下(时间间隔600秒):
select d.city, d.ssxs, d.zj_code, d.zj_mc, c.dlv_date,c.mail_num, c.dlv_sts_code
from tb_evt_dlv c, sncn_zd_jg d
where c.dlv_date = to_date('2015-12-7','yyyy-mm-dd')
and c.dlv_sts_code = 'I'
and c.dlv_bureau_org_code = d.zj_code
and c.mail_num in (select t.mail_num
from tb_evt_dlv t,tb_evt_pseg_mail_rela v
where t.dlv_date = to_date('2015-12-7','yyyy-mm-dd')
and t.mail_num=v.mail_num
and t.dlv_date=v.seal_date
and t.dlv_sts_code = 'I'
and t.dlv_bureau_org_code = c.dlv_bureau_org_code
and (t.dlv_time - v.seal_time)*3600*24 <= 600
and rownum <= 2 )
order by d.zj_code;
需要注意的是,oracle中日期时间和Excel类似,虽然显示出来是日期+时间,但其值可以认为由整数和小数两部分组成,整数部分是距某日期的天数(Excel定义1900 年 1 月 1 日的值是1,oracle似乎从公元元年 1 月 1 日开始,公元前是负数,没有0值。Oracle9i SQL Reference文档中有:from
January 1, 4712 BC to December 31, 9999 AD. 即公元前4712年1月1日到公元9999年12月31日),小数则是时间值,是以当前时间距0时的秒数除以24*3600得到的数据。所以,两个时间之差乘以24*3600就是以秒为单位的时间。同理,乘以24就是以小时为单位的时间,乘以24*60就是以分钟为单位的时间。
客服需要抽取妥投邮件进行回访,为了保证抽取的覆盖率,要求每个机构抽取几条,然后进行回访,语句如下:
select d.city, d.ssxs, d.zj_code, d.zj_mc, c.dlv_date,c.mail_num, c.dlv_sts_code
from tb_evt_dlv c, sncn_zd_jg d
where c.dlv_date = to_date('2015-12-7', 'yyyy-mm-dd')
and c.dlv_sts_code = 'I'
and c.dlv_bureau_org_code = d.zj_code
and c.mail_num in (select t.mail_num
from tb_evt_dlv t
where t.dlv_date = to_date('2015-12-7', 'yyyy-mm-dd')
and t.dlv_sts_code = 'I'
and t.dlv_bureau_org_code = c.dlv_bureau_org_code
and rownum <= 2)
order by d.zj_code;
上述语句是随机抽取的,由于我们是对虚假信息进行抽查,为了提高准确度,就需要对信息进行筛选,比如抽取下段和妥投时间间隔过小的邮件,语句如下(时间间隔600秒):
select d.city, d.ssxs, d.zj_code, d.zj_mc, c.dlv_date,c.mail_num, c.dlv_sts_code
from tb_evt_dlv c, sncn_zd_jg d
where c.dlv_date = to_date('2015-12-7','yyyy-mm-dd')
and c.dlv_sts_code = 'I'
and c.dlv_bureau_org_code = d.zj_code
and c.mail_num in (select t.mail_num
from tb_evt_dlv t,tb_evt_pseg_mail_rela v
where t.dlv_date = to_date('2015-12-7','yyyy-mm-dd')
and t.mail_num=v.mail_num
and t.dlv_date=v.seal_date
and t.dlv_sts_code = 'I'
and t.dlv_bureau_org_code = c.dlv_bureau_org_code
and (t.dlv_time - v.seal_time)*3600*24 <= 600
and rownum <= 2 )
order by d.zj_code;
需要注意的是,oracle中日期时间和Excel类似,虽然显示出来是日期+时间,但其值可以认为由整数和小数两部分组成,整数部分是距某日期的天数(Excel定义1900 年 1 月 1 日的值是1,oracle似乎从公元元年 1 月 1 日开始,公元前是负数,没有0值。Oracle9i SQL Reference文档中有:from
January 1, 4712 BC to December 31, 9999 AD. 即公元前4712年1月1日到公元9999年12月31日),小数则是时间值,是以当前时间距0时的秒数除以24*3600得到的数据。所以,两个时间之差乘以24*3600就是以秒为单位的时间。同理,乘以24就是以小时为单位的时间,乘以24*60就是以分钟为单位的时间。
相关文章推荐
- Oracle逻辑迁移某业务用户及数据
- 实例: Java代码操作oracle数据库(JDBC+sevrlet+jsp+html)
- Oracle建立实例时报【ORA-12638: 身份证明检索失败解决方法】错误的解决方法
- ORA-12638: 身份证明检索失败 的解决办法
- checkpoint说明
- Oracle协议适配器错误解决办法
- Oracle exp/imp导出导入工具的使用
- 用java调用oracle存储过程总结
- oracle 卸载
- 查看oracle用户状态
- oracle行变列(多行变成一行/多行合并成一行/多行合并成多列/合并行)
- Oracle数据库学习<二>
- oraclel列变行(多列变成多行)
- ITIL&Oracle AIM 自己理解
- Oracle的ERP实施方法论
- 修改oracle所在的linux主机名-单机
- oracle数据库block、tigger、function、package
- oracle 分区删除三种方式
- ORACLE预定义角色
- ORACLE角色(通过DBA创建)