Sql 使用oracle-11g返回子组的每个最大计数
我有一张桌子Sql 使用oracle-11g返回子组的每个最大计数,sql,oracle,oracle11g,group-by,aggregate-functions,Sql,Oracle,Oracle11g,Group By,Aggregate Functions,我有一张桌子 CREATE TABLE table1 ( from_id varchar2(10), to_id varchar2(10), b_id varchar2(20) NOT NULL, exp_in_date varchar2(20) NOT NULL ); 样本数据: Insert into TABLE1 (FROM_ID,TO_ID,B_ID,EXP_IN_DATE) values ('5','2','20140203056',TO_DATE('2014
CREATE TABLE table1
(
from_id varchar2(10),
to_id varchar2(10),
b_id varchar2(20) NOT NULL,
exp_in_date varchar2(20) NOT NULL
);
样本数据:
Insert into TABLE1 (FROM_ID,TO_ID,B_ID,EXP_IN_DATE) values ('5','2','20140203056',TO_DATE('20140203', 'yyyymmdd'));
Insert into TABLE1 (FROM_ID,TO_ID,B_ID,EXP_IN_DATE) values ('5','2','20140203056',TO_DATE('20140203', 'yyyymmdd'));
Insert into TABLE1 (FROM_ID,TO_ID,B_ID,EXP_IN_DATE) values ('5','1','20140203056',TO_DATE('20140203', 'yyyymmdd'));
Insert into TABLE1 (FROM_ID,TO_ID,B_ID,EXP_IN_DATE) values ('5','2','20140203057',TO_DATE('20140203', 'yyyymmdd'));
Insert into TABLE1 (FROM_ID,TO_ID,B_ID,EXP_IN_DATE) values ('2','5','20140203057',TO_DATE('20140203', 'yyyymmdd'));
Insert into TABLE1 (FROM_ID,TO_ID,B_ID,EXP_IN_DATE) values ('5','1','20140203057',TO_DATE('20140203', 'yyyymmdd'));
Insert into TABLE1 (FROM_ID,TO_ID,B_ID,EXP_IN_DATE) values ('5','2','20140203058',TO_DATE('20140203', 'yyyymmdd'));
Insert into TABLE1 (FROM_ID,TO_ID,B_ID,EXP_IN_DATE) values ('2','5','20140203058',TO_DATE('20140203', 'yyyymmdd'));
Insert into TABLE1 (FROM_ID,TO_ID,B_ID,EXP_IN_DATE) values ('5','1','20140203058',TO_DATE('20140203', 'yyyymmdd'));
Insert into TABLE1 (FROM_ID,TO_ID,B_ID,EXP_IN_DATE) values ('5','2','20140203059',TO_DATE('20140203', 'yyyymmdd'));
Insert into TABLE1 (FROM_ID,TO_ID,B_ID,EXP_IN_DATE) values ('2','5','20140203059',TO_DATE('20140203', 'yyyymmdd'));
Insert into TABLE1 (FROM_ID,TO_ID,B_ID,EXP_IN_DATE) values ('5','1','20140203059',TO_DATE('20140203', 'yyyymmdd'));
Insert into TABLE1 (FROM_ID,TO_ID,B_ID,EXP_IN_DATE) values ('5','2','20140204059',TO_DATE('20140204', 'yyyymmdd'));
Insert into TABLE1 (FROM_ID,TO_ID,B_ID,EXP_IN_DATE) values ('5','2','20140204059',TO_DATE('20140204', 'yyyymmdd'));
Insert into TABLE1 (FROM_ID,TO_ID,B_ID,EXP_IN_DATE) values ('5','2','20140204059',TO_DATE('20140204', 'yyyymmdd'));
Insert into TABLE1 (FROM_ID,TO_ID,B_ID,EXP_IN_DATE) values ('5','2','20140204059',TO_DATE('20140204', 'yyyymmdd'));
Insert into TABLE1 (FROM_ID,TO_ID,B_ID,EXP_IN_DATE) values ('5','2','20140204059',TO_DATE('20140204', 'yyyymmdd'));
Insert into TABLE1 (FROM_ID,TO_ID,B_ID,EXP_IN_DATE) values ('5','1','20140203060',TO_DATE('20140203', 'yyyymmdd'));
Insert into TABLE1 (FROM_ID,TO_ID,B_ID,EXP_IN_DATE) values ('5','1','20140203060',TO_DATE('20140203', 'yyyymmdd'));
Insert into TABLE1 (FROM_ID,TO_ID,B_ID,EXP_IN_DATE) values ('5','1','20140203060',TO_DATE('20140203', 'yyyymmdd'));
Insert into TABLE1 (FROM_ID,TO_ID,B_ID,EXP_IN_DATE) values ('5','1','20140203060',TO_DATE('20140203', 'yyyymmdd'));
Insert into TABLE1 (FROM_ID,TO_ID,B_ID,EXP_IN_DATE) values ('5','4','20140203061',TO_DATE('20140203', 'yyyymmdd'));
Insert into TABLE1 (FROM_ID,TO_ID,B_ID,EXP_IN_DATE) values ('5','4','20140203061',TO_DATE('20140203', 'yyyymmdd'));
Insert into TABLE1 (FROM_ID,TO_ID,B_ID,EXP_IN_DATE) values ('5','4','20140203061',TO_DATE('20140203', 'yyyymmdd'));
Insert into TABLE1 (FROM_ID,TO_ID,B_ID,EXP_IN_DATE) values ('5','4','20140203061',TO_DATE('20140203', 'yyyymmdd'));
Insert into TABLE1 (FROM_ID,TO_ID,B_ID,EXP_IN_DATE) values ('5','4','20140203061',TO_DATE('20140203', 'yyyymmdd'));
Insert into TABLE1 (FROM_ID,TO_ID,B_ID,EXP_IN_DATE) values ('5','4','20140203061',TO_DATE('20140203', 'yyyymmdd'));
Insert into TABLE1 (FROM_ID,TO_ID,B_ID,EXP_IN_DATE) values ('5','4','20140203061',TO_DATE('20140203', 'yyyymmdd'));
Insert into TABLE1 (FROM_ID,TO_ID,B_ID,EXP_IN_DATE) values ('5','3','20140203062',TO_DATE('20140203', 'yyyymmdd'));
Insert into TABLE1 (FROM_ID,TO_ID,B_ID,EXP_IN_DATE) values ('5','3','20140203062',TO_DATE('20140203', 'yyyymmdd'));
Insert into TABLE1 (FROM_ID,TO_ID,B_ID,EXP_IN_DATE) values ('5','3','20140203062',TO_DATE('20140203', 'yyyymmdd'));
Insert into TABLE1 (FROM_ID,TO_ID,B_ID,EXP_IN_DATE) values ('5','3','20140203062',TO_DATE('20140203', 'yyyymmdd'));
Insert into TABLE1 (FROM_ID,TO_ID,B_ID,EXP_IN_DATE) values ('5','3','20140203062',TO_DATE('20140203', 'yyyymmdd'));
Insert into TABLE1 (FROM_ID,TO_ID,B_ID,EXP_IN_DATE) values ('5','1','20140203063',TO_DATE('20140203', 'yyyymmdd'));
Insert into TABLE1 (FROM_ID,TO_ID,B_ID,EXP_IN_DATE) values ('5','1','20140203063',TO_DATE('20140203', 'yyyymmdd'));
Insert into TABLE1 (FROM_ID,TO_ID,B_ID,EXP_IN_DATE) values ('5','1','20140203063',TO_DATE('20140203', 'yyyymmdd'));
Insert into TABLE1 (FROM_ID,TO_ID,B_ID,EXP_IN_DATE) values ('5','1','20140203063',TO_DATE('20140203', 'yyyymmdd'));
Insert into TABLE1 (FROM_ID,TO_ID,B_ID,EXP_IN_DATE) values ('5','1','20140203064',TO_DATE('20140203', 'yyyymmdd'));
Insert into TABLE1 (FROM_ID,TO_ID,B_ID,EXP_IN_DATE) values ('5','1','20140203064',TO_DATE('20140203', 'yyyymmdd'));
Insert into TABLE1 (FROM_ID,TO_ID,B_ID,EXP_IN_DATE) values ('5','1','20140203064',TO_DATE('20140203', 'yyyymmdd'));
Insert into TABLE1 (FROM_ID,TO_ID,B_ID,EXP_IN_DATE) values ('5','1','20140203064',TO_DATE('20140203', 'yyyymmdd'));
我想得到每个'4'b_id的最大计数*,每个4 b_id代表一个小时内的事务,比方说
20140203056至20140203059
e、 g.预期结果
Date-hr from_id to_id count(no_record)
------------------------------------------------------------
February, 03 2014 14:00 2 5 1
February, 03 2014 14:00 5 1 1
我可以做简单的分组。我想我可以用PLSQL编写它,但是该查询的性能非常重要。如果没有更好的解决方案,我希望执行for loop和ifbevered than比较。您的意思是这样的吗
select count(*) countx,from_id,to_id,exp_in_date
from table1
group by from_id,to_id,exp_in_date;
请参阅。我不明白每个“4”个b\u id的最大计数*。而且我也不明白每个4个b\u id代表一小时内的交易。抱歉,我的演示不好。它是关于+获取下一个“4”b_id的最大值,例如事务5,2的最大from_id和to_id是9-对于b_id1+事务5,2的最大from_id和to_id是3-对于b_id2,事务5,2的最大from_id和to_id是1-对于b_id3,事务5,2的最大from_id和to_id是10-对于b_id4我在寻找bid1的子组,4是10 b_id=4,虽然b_id5的下一个值是99,事务5的最大from_id和to_id是99-对于b_id5,你可以认为b_id来自yyyyymmddxxx–其中XXX是每个事务在一小时内的顺序,我仍然不明白。事务5,2的最大from_id和to_id为9事务5,2是什么?它是否由from_id=5和to_id=2的行表示?表中所有行的maxfrom_id为5,表中所有行的maxto_id为5。那么最大值是9?请编辑OP,使其更清楚,这是更有用的,然后添加大量的评论。我认为详细阐述你的例子是有道理的。您如何计算从20140203056到20140203059的交易的预期结果。很抱歉,我不知道如何在注释中添加换行符。对事务5,2表示从_id5到_id2。最后一个事务只是一个示例,用于解释每“4个b_id”的最大计数*。结果为选择b_id、从_id到_id,将*从表1中计算为x按从\u ID,到\u ID,B\u ID选择到\u date到\u numbersSubstrb\u ID,1,8,'yyyymmdd'作为mydate,B\u ID,从\u ID,到\u ID,x作为记录编号,truncto_Numbers Substrb_id,9,3/4,0作为时钟,按to_Numbers Substrb_id分区上的行数,1,8,truncto_Numbers Substrb_id,9,3/4,0,FROM_id,to_id按x desc tom从结果排序