有一个大的分区表,大致有六百万条记录,并且每天以一万多条左右的速度增长.
表的部分结构如下:
rdate date;--发生日期
account char;--编号
money number(12,2);--发生金额
其余字段省略....每个编号在当天不一定产生记录.
如何用最佳的方法找出连续10天发生交易的记录?
表的部分结构如下:
rdate date;--发生日期
account char;--编号
money number(12,2);--发生金额
其余字段省略....每个编号在当天不一定产生记录.
如何用最佳的方法找出连续10天发生交易的记录?
解决方案 »
- 这个SQL语句应该怎样写呢?
- 请高手指点下ORLCLE增加字段的一个问题!(急!在线等!)
- 新手求助:帮忙看看一个存储过程,总是提示"错误: PLS-00103: 出现符号 ""在需要下列之一时:constant exception"
- insert into 表(字段) select 字段 from 表,出现ORA-00997: illegal use of LONG datatype
- net manager是什么,在服务器端设还是在客户端,有书的给我一份
- HELP ME!
- PL/SQL的for循环怎么写?
- **************如何让数据库自动启动?**************
- 这个update 语句怎么写?
- 关于分区表的问题
- 求:在游标中如何使用可能为空的参数?
- 表的字段数对查询速度影响大吗?
---------- -----------
101 2005-7-1
101 2005-7-2
101 2005-7-3
101 2005-7-4
101 2005-7-5
101 2005-7-7
101 2005-7-8
101 2005-7-9
101 2005-7-10
101 2005-7-11
101 2005-7-12
101 2005-7-13
102 2005-7-14
102 2005-7-15
102 2005-7-16
102 2005-7-12
102 2005-7-24
102 2005-7-31
102 2005-7-26
102 2005-7-30ACCOUNT RDATE
---------- -----------
102 2005-7-22
102 2005-7-17
102 2005-7-18
102 2005-7-19
102 2005-7-20
102 2005-7-21
102 2005-7-23
103 2005-7-25
103 2005-7-27
103 2005-7-2830 rows selectedselect distinct account from
(select a.*,
rdate - row_number() over(partition by account order by rdate) part
from a)
group by account,part
having count(*) >=5SQL>
7 /ACCOUNT
----------
101
102SQL>
你可以用DISTINCT解决这个问题“有什么比较快的方法吗?”
建议建立辅助表
(select a.*,
rdate - dense_rank() over(partition by account order by rdate) part
from a)
group by account,part
having max(rdate) - min(rdate) >= 4
select account
where rdate>=sysdate-10 --> 最近20天-最近10天
select account
where sysdate-10>=rdate>=sysdate-20 ....
select account
where to_char(rdate,'YYYYMMDD')>=to_char(sysdate-10,'YYYYMMDD')