是否可以使用任何百分位函数的窗口?或者你知道一个可以获得滚动百分位值的工作吗?
移动平均线很容易:
select avg(foo) over (order by foo_date rows
between 20 preceding and 1 preceding) foo_avg_ma
from foo_tab
Run Code Online (Sandbox Code Playgroud)
但我无法弄清楚如何在同一个窗口获得中位数(50%百分位数).
我有471个文件,总计约100GB.这些文件是"\ t"分开的,事务数据采用以下格式:
char(10) not null,
char(8) not null,
char(1) not null,
char(4) not null,
number not null,
char(1) not null,
char(1) not null,
char(1) not null,
number not null
Run Code Online (Sandbox Code Playgroud)
文件中事务的顺序很重要,需要保留,理想情况下使用主键ID.最初,我用sqlldr加载这些文件但是需要很长时间.我最近了解了外部表格.从战略角度看,哪种方法更好?外部表如何工作?谢谢.
我有一个程序来查找一个非常大的表中的一系列事务的第一个,最后一个,最大和最小价格,该表按日期,对象名称和代码组织.我还需要交易数量的总和.表中大约有30亿行,此过程需要很多天才能运行.我想尽可能减少时间.我有一个关于trans表中的distinct字段的索引,并查看查询的select部分的解释计划,正在使用索引.我对另一种方法的建议持开放态度.我使用的是Oracle 11g R2.谢谢.
declare
cursor c_iter is select distinct dt, obj, cd from trans;
r_iter c_iter%ROWTYPE;
v_fir number(15,8);
v_las number(15,8);
v_max number(15,8);
v_min number(15,8);
v_tot number;
begin
open c_iter;
loop
fetch c_iter into r_iter;
exit when c_iter%NOTFOUND;
select max(fir), max(las) into v_fir, v_las
from
( select
first_value(prc) over (order by seq) as "FIR",
first_value(prc) over (order by seq desc) as "LAS"
from trans
where dt = r_iter.DT and obj = r_iter.OBJ and cd = r_iter.CD );
select max(prc), min(prc), sum(qty) …Run Code Online (Sandbox Code Playgroud)