请教一下
在一张表里面ZCB
日期 帐号 总资产 昨日资产
2011-05-01 001 10000 50000
2011-05-02 001 25000 10000昨日资产的值为前一天的总资产传入2个时间参数BEG_DATE,END_DATE如何用SELECT 取出一段时间内的数据,并且保证昨日资产=前一天的总资产。不使用循环实现。select zzc from zcb where date=(select max(date) from zcb where date<beg_date)
在一张表里面ZCB
日期 帐号 总资产 昨日资产
2011-05-01 001 10000 50000
2011-05-02 001 25000 10000昨日资产的值为前一天的总资产传入2个时间参数BEG_DATE,END_DATE如何用SELECT 取出一段时间内的数据,并且保证昨日资产=前一天的总资产。不使用循环实现。select zzc from zcb where date=(select max(date) from zcb where date<beg_date)
直接select表,加2个条件,,,一个是时间范围,一个是昨日资产=前一天的总资产
SELECT a.*
FROM zcb a, zcb b
WHERE b.日期 = a.日期 - 1
AND a.昨日资产 = b.总资产
AND a.帐号 = b.帐号
AND a.日期 BETWEEN beg_date AND end_date;
2011-05-01 001 10000 50000
2011-05-02 001 25000 10000想实现先查询出第一条后,第2条的昨日资产取的是前一天的总资产
然后一条条往后。
把一段时间的都取出来。
用循环实现比较简单
但现在想用SELECT 语句实现。
(
v_date date,
v_number varchar2(200),
total number not null default 0 ,
yes_total number not null default 0
);insert into ZCB (V_DATE, V_NUMBER, TOTAL, YES_TOTAL)
values (to_date('01-06-2011', 'dd-mm-yyyy'), '001', 30000, 50000);
insert into ZCB (V_DATE, V_NUMBER, TOTAL, YES_TOTAL)
values (to_date('02-06-2011', 'dd-mm-yyyy'), '002', 25000, 10000);
insert into ZCB (V_DATE, V_NUMBER, TOTAL, YES_TOTAL)
values (to_date('03-06-2011', 'dd-mm-yyyy'), '003', 60000, 23000);
insert into ZCB (V_DATE, V_NUMBER, TOTAL, YES_TOTAL)
values (to_date('04-06-2011', 'dd-mm-yyyy'), '004', 40000, 90000);
insert into ZCB (V_DATE, V_NUMBER, TOTAL, YES_TOTAL)
values (to_date('05-06-2011', 'dd-mm-yyyy'), '005', 0, 70000);
insert into ZCB (V_DATE, V_NUMBER, TOTAL, YES_TOTAL)
values (to_date('06-06-2011', 'dd-mm-yyyy'), '006', 50000, 60000);
commit;select
* from
(
select distinct
b.v_date,
b.v_number,
b.total,
case when (b.v_date = t.v_date + 1) then t.total end as yes_total
from zcb t,
zcb b
) t
where t.yes_total is not null
order by t.v_date