SQL:多表关联采取这一纪录迄今为止最大
笔者:iamlasong
1、需求
两个表,投递记录表和封发开拆记录表,如今想知道投递日期距最后一次封发日期天数分布情况。
对这个需求,须要先查询出投递明细,同一时候要知道相应的邮件最后一次封发情况。如机构、日期等。
2、明细查询
考虑到一天可能封发多次,所以取日期和时间都是最大的那条,语句例如以下:
- select d.city,d.ssxs,d.zj_code,d.zj_mc,c.mail_num,
- c.dlv_date,to_char(c.dlv_time,'hh24miss'), c.actual_goods_fee,
- c.dlv_pseg_code,c.dlv_pseg_name,c.dlv_bureau_name,
- c.dlv_staff_code,c.dlv_staff_name,c.signer_name,
- a.deal_org_code,a.dlv_org_code,a.label_strip,a.deal_date,a.deal_time
- from tb_evt_bag_mail_rela a, tb_evt_dlv c, tb_jg d
- where a.mail_num = c.mail_num
- and a.bag_actn_code = '3'
- and c.dlv_date between to_date('2014-6-1', 'yyyy-mm-dd') and
- to_date('2014-6-1', 'yyyy-mm-dd')
- and c.dlv_bureau_org_code = d.zj_code
- and c.dlv_sts_code = 'I'
- and d.jgfl = 'yz'
- and (a.deal_date, a.deal_time) =
- (select max(t.deal_date), max(t.deal_time)
- from tb_evt_bag_mail_rela t
- where t.mail_num = a.mail_num
- and t.bag_actn_code = '3'
- group by t.mail_num, t.bag_actn_code)
3、时限分布
有了明细语句。时间分布就比較简单了。语句例如以下:
- select d.city, d.ssxs, d.zj_code, d.zj_mc, count(*) ttzl,
- Sum(Decode(c.Dlv_Date - a.deal_date, 0, 1, 0)) t0,
- Sum(Decode(c.Dlv_Date - a.deal_date, 1, 1, 0)) t1,
- Sum(Decode(c.Dlv_Date - a.deal_date, 2, 1, 0)) t2,
- Sum(Decode(c.Dlv_Date - a.deal_date, 3, 1, 0)) t3,
- Sum(Decode(c.Dlv_Date - a.deal_date, 4, 1, 0)) t4,
- Sum(Decode(c.Dlv_Date - a.deal_date, 5, 1, 0)) t5
- from tb_evt_bag_mail_rela a, tb_evt_dlv c, tb_jg d
- where a.mail_num = c.mail_num
- and a.bag_actn_code = '3'
- and c.dlv_date between to_date('2014-6-1', 'yyyy-mm-dd') and
- to_date('2014-6-1', 'yyyy-mm-dd')
- and c.dlv_bureau_org_code = d.zj_code
- and c.dlv_sts_code = 'I'
- and d.jgfl = 'yz'
- and (a.deal_date, a.deal_time) =
- (select max(t.deal_date), max(t.deal_time)
- from tb_evt_bag_mail_rela t
- where t.mail_num = a.mail_num
- and t.bag_actn_code = '3'
- group by t.mail_num, t.bag_actn_code)
- group by d.city, d.ssxs, d.zj_code, d.zj_mc
- order by d.city, d.ssxs, d.zj_code
4、存在问题及解决
上面语句的查询结果出来后。经核对,数字对不上,记录变少了,差了非常多。检查发现有一部分邮件没有分发记录。只是这个数字非常少,那么原因出在哪儿呢?
原来原因出在最后一个条件上。最后一个条件是查出最大日期和最大时间。可是。最大日期的那条记录时间不一定最大,结果导致,这些邮件都被涮下去了。为了得到正确结果。最后一个条件改为:
- and to_char(a.deal_date,'yyyymmdd')||to_char(a.deal_time,'000000') =
- (select max(to_char(t.deal_date,'yyyymmdd')||to_char(t.deal_time,'000000'))
- from tb_evt_bag_mail_rela t
- where t.mail_num = a.mail_num
- and t.bag_actn_code = '3'
- group by t.mail_num, t.bag_actn_code)
时间按格式“000000”转换是由于表中时间是时分秒组成的数值型字段,长度不定。按格式“000000”转换后统一长度,便于比較大小。比方日期时间合成结果:20140530 091239,就是2014年5月30日9时12分39秒。
- select d.city, d.ssxs, d.zj_code, d.zj_mc, count(*) ttzl,
- Sum(Decode(c.Dlv_Date - a.deal_date, 0, 1, 0)) t0,
- Sum(Decode(c.Dlv_Date - a.deal_date, 1, 1, 0)) t1,
- Sum(Decode(c.Dlv_Date - a.deal_date, 2, 1, 0)) t2,
- Sum(Decode(c.Dlv_Date - a.deal_date, 3, 1, 0)) t3,
- Sum(Decode(c.Dlv_Date - a.deal_date, 4, 1, 0)) t4,
- Sum(Decode(c.Dlv_Date - a.deal_date, 5, 1, 0)) t5
- from tb_evt_bag_mail_rela a, tb_evt_dlv c, tb_jg d
- where a.mail_num = c.mail_num
- and a.bag_actn_code = '3'
- and c.dlv_date between to_date('2014-6-1', 'yyyy-mm-dd') and
- to_date('2014-6-1', 'yyyy-mm-dd')
- and c.dlv_bureau_org_code = d.zj_code
- and c.dlv_sts_code = 'I'
- and d.jgfl = 'yz'
- and to_char(a.deal_date,'yyyymmdd')||to_char(a.deal_time,'000000') =
- (select max(to_char(t.deal_date,'yyyymmdd')||to_char(t.deal_time,'000000'))
- from tb_evt_bag_mail_rela t
- where t.mail_num = a.mail_num
- and t.bag_actn_code = '3'
- group by t.mail_num, t.bag_actn_code)
- group by d.city, d.ssxs, d.zj_code, d.zj_mc
- order by d.city, d.ssxs, d.zj_code
最后须要说明一下。to_char按指定格式“000000”转换后,会在前面加上一个空格,只是这个不影响比較。to_char这个函数后面假设没有格式指定,转换后则没有空格,只是长度就是数字的实际长度了,要想统一长度。能够加上一个大数。比如,
- to_char(t.deal_time+9000000)
转换结果:201405309091239
版权声明:本文博客原创文章,博客,未经同意,不得转载。
SQL:多表关联采取这一纪录迄今为止最大的更多相关文章
- 图解SQL多表关联查询
图解SQL多表关联查询 网上看了篇文章关于多表连接的,感觉很好,记录下来,以便日后自己学习 内连接 左连接 右连接 全外连接 1. 查两表关联列相等的数据 ...
- SQL Server表关联
表关联:Hash.Nested Loops.Merge.这是实际算法,不是T-SQL中的inner/left/right/full/cross join.优化器会把这些T-SQL写法转换成上面的3种算 ...
- SQL 两表关联查询 where 条件中等号两端字段顺序对效率的影响
现有两表A(大).B(小)作关联查询,SQL语句如下: SQL1:select * from A,B where A.id = B.id SQL2:select * from A,B where B. ...
- PL/SQL 多表关联UPDATE
假设有两个表A和B,A表字段a,b,c,d,B表字段b,e,f,两表的关联条件是字段b,现在想做个data patch,欲将B表中的字段e的值patch给A表的字段c. 有如下两种方法: 1 upda ...
- SQL多表关联查询
在创建关系型数据表时,根据数据库范式的要求,为了降低数据的冗余,提供数据维护的灵活性 将数据分成多个表进行存储,实际工作当中,需要多个表的信息,需要将多个表合并显示 --内连接 selec ...
- sql多表关联
inner join(等值连接) 只返回两个表中联结字段相等的行 left join(左联接) 返回包括左表中的所有记录和右表中联结字段相等的记录 right join(右联接) 返回包括右表中的所有 ...
- sql -- 多表关联,update(用户奖励)
表设计: users_buy: users_score: 需求: 1.根据用户分组,找出用户消费最高的金额 select user_name, max(paymoney) as pm from use ...
- SQL语句分组排序,多表关联排序
SQL语句分组排序,多表关联排序总结几种常见的方法: 案例一: 在查询结果中按人数降序排列,若人数相同,则按课程号升序排列? 分析:单个表内的多个字段排序,一般可以直接用逗号分割实现. select ...
- Spring+MyBatis框架中sql语句的书写,数据集的传递以及多表关联查询
在很多Java EE项目中,Spring+MyBatis框架经常被用到,项目搭建在这里不再赘述,现在要将的是如何在项目中书写,增删改查的语句,如何操作数据库,以及后台如何获取数据,如何进行关联查询,以 ...
随机推荐
- rsync Backups for Windows
Transfer your Windows Backups to an rsync server over SSH rsync.net provides cloud storage for offsi ...
- Swift - 判断设备类型开发兼容的iOS应用(iPad使用分隔视图控制器)
1,分割视图控制器(UISplitViewController) 在iPhone应用中,使用导航控制器由上一层界面进入下一层界面. 但iPad屏幕较大,通常使用SplitViewController来 ...
- svn强制用户提交时写日志
#!/bin/sh REPOS="$1" TXN="$2" SVNLOOK=/usr/bin/svnlook #根据你的SVN目录而定 LOGMSG=`$SVN ...
- SystemParametersInfo API学习(128个中文参数解释,215个实际值)
uiAction:该参数指定要查询或设置的系统级参数.其取值如下:SPI_GETACCESSTIMEOUT:检索与可访问特性相关联的超时段的信息,PvParam参数必须指向某个ACCESSTIMEOU ...
- 检测用户是否具有administrator权限(OpenThreadToken,OpenProcessToken,GetTokenInformation,AllocateAndInitializeSid和EqualSid)
检测用户是否具有administrator权限const SECURITY_NT_AUTHORITY: TSIDIdentifierAuthority = (Value: (0, 0, 0, 0, 0 ...
- 五、Linux/UNIX操作命令积累【cp、mv、cat、grep、ps】
在使用Linux/UNIX下,常常会使用文本界面去设置系统或操作系统,作者本人在工作的过程也在不断接触这方面的命令,所以为此特酝酿.准备.開始了本文的编写.本文主要记录自己平时遇到的一些Linux/U ...
- 承载于以太网帧之上的数据包的解析——ARP、IPv4、IPv6
承接上一博文而来,继续解析网络数据包,对于承载在以太网上的三种协议进行了解析,主要是分为依据RFC定义的标准先解析头部数据,然后得到有效载荷,即为协议包括的实体数据,更上层进行进一步处理. 一.ARP ...
- RGB與CIELAB色彩空間轉換
原地址:http://cg2010studio.wordpress.com/2012/10/02/rgb與cielab色彩空間轉換/ 之前有研究CIE L*a*b*色彩空間,現在想更進一步探討RGB色 ...
- Patch to solve sqlite3_int64 error when building Python 2.7.3 on RHEL/CentOS
Patch to solve sqlite3_int64 error when building Python 2.7.3 on RHEL/CentOS Patch to solve sqlite3_ ...
- Heritrix与Nutch对比
Nutch 开发语言:Java http://lucene.apache.org/nutch/ 简介: Apache的子项目之一,属于Lucene项目下的子项目. Nutch是一个基于Lucene,类 ...