查询表中最大日期 (比如‘2012-7-26’),前10年的开始日期(‘2002-1-1’)。
通过 max,trunc,add_months,3个函数完成。
select add_months(trunc(max(sysdate),'yyyy'),-12*10) from dual;
insert all:插入多张表或者同一张表插入多行记录
create table ta(
a varchar2(20),
b varchar2(30)
);
create table tb(
a varchar2(20),
b varchar2(30)
);
insert all
into ta(a,b)values('A','1')
into tb(a,b)values('B','2')
SELECT * FROM DUAL;
OVER (PARTITION BY ..)
例:select a,b,c, sum(c) OVER (PARTITION BY b) sum_c
对 b列值相同的行进行c值的累计.
select a,b,c, count(*) OVER (PARTITION BY b) sum_c
对b进行分组,计算每组的个数count
排名
rank()over(order by 字段 asc/desc) 按字段的升序或降序排名,排名若出现并列第n名的情况,它之后的会跳过空出的名次,例如:1,2,2,4;
dense_rank()(order by 字段 asc/desc),排名若出现并列第n名,它之后的名次为n+1,例如:1,2,2,3;
partition:将排名限制到某一分组,例如 rank()over(partition by 字段1 order by 字段2),以字段1进行分组,按字段2进行排名。
oracle sql 按某个字段分组然后从每组取出最大的一条纪录
每种基金只取最新日期的数据
select fund_name,buy_date,fund_capital,possess_days,fund_profit,rn from (
select t.*,row_number()over(partition by fund_in_acc order by buy_date desc)rn from T_PROFIT t
)where rn=1
select t.*,row_number()over(partition by fund_in_acc order by buy_date desc)rn from T_PROFIT t
)where rn=1