【发布时间】:2014-04-13 08:13:12
【问题描述】:
我有一张桌子
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 的最大 count(*),每个 4 b_id 代表一个小时内的交易,比方说
20140203056 到 20140203059
例如预期结果
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和if(greater)而不是比较。
【问题讨论】:
-
我不明白“每 '4' b_id 的最大计数 (*)”。另外我不明白“每个 4 b_id 代表一个小时内的交易”
-
对不起,我的演讲很糟糕。它是关于 + 获取下一个“4”“b_id”的最大值,例如事务 5,2 的最大 from_id 和 to_id 为 9 - 对于 b_id(1) + 事务 5,2 的最大 from_id 和 to_id 为 3 - - 对于 b_id(2),事务 5,2 的最大 from_id 和 to_id 为 1 -- 对于 b_id(3),事务 5,2 的最大 from_id 和 to_id 为 10 -- 对于 b_id(4)
-
bid(1,4) 子组的最大交易价值(我正在寻找)是 10 (b_id = 4),尽管 b_id(5) 的下一个值是 99,最大 from_id并且事务 5,2 的 to_id 是 99 -- 对于 b_id(5) 您可以认为 b_id 来自 yyyyMMddXXX - 其中 XXX 是
hour中每个事务的序列 -
对不起,我还是不明白。 “事务 5,2 的最大 from_id 和 to_id 为 9” 什么是事务 5,2?它是否由带有
from_id=5 and to_id=2的行表示?表中所有行的max(from_id)是5,表中所有行的max(to_id)也是5。那么最大值是 9 是多少?请编辑 OP 以使其更清楚,然后添加大量 cmets 更有用。我认为详细说明您的示例是有道理的。您如何计算从“20140203056 到 20140203059”的交易的这个“预期结果”。 -
很抱歉,我不知道如何在评论中添加换行符。是的。事务 5,2 表示从 from_id 5 到 to_id 2 最后一个只是一个示例,用于解释每个 '4 b_id' 的“最大计数(*)”。
标签: sql oracle oracle11g group-by aggregate-functions