Oracle FAQ | Your Portal to the Oracle Knowledge Grid |
![]() |
![]() |
Home -> Community -> Usenet -> c.d.o.misc -> Re: Finding latest date given a date
> I have a database table that has millions of records.
> For each unique position(client, item_id, pos_basis), I need to find
> the latest record given a date.
>
> CLIENT DATE ITEM_ID POS_BASIS QTY
> A 20/3/2003 1001 3 1000
> A 21/2/2003 1001 3 10
> A 21/3/2003 1001 4 1000
> A 23/2/2003 1001 4 10
> B 20/3/2003 1001 3 1000
> B 21/2/2003 1002 3 10
> B 21/3/2003 1003 3 1000
> B 23/2/2003 1004 3 10
>
>
> Result for 1/3/2003 for above table should be
> CLIENT DATE ITEM_ID POS_BASIS QTY
> A 21/2/2003 1001 3 10
> A 23/2/2003 1001 4 10
> B 21/2/2003 1002 3 10
> B 23/2/2003 1004 3 10
>
>
Which version of Oracle are you using?
Anyway this would do it on 9i and I believe on 8i as well:
alter session set nls_date_format = 'dd/mm/yyyy';
create table a_ (
client char(1),
dt date,
item_id number,
pos_basis number,
qty number
);
insert into a_ values('A','20/3/2003',1001,3,1000); insert into a_ values('A','21/2/2003',1001,3, 10); insert into a_ values('A','21/3/2003',1001,4,1000); insert into a_ values('A','23/2/2003',1001,4, 10); insert into a_ values('B','20/3/2003',1001,3,1000); insert into a_ values('B','21/2/2003',1002,3, 10); insert into a_ values('B','21/3/2003',1003,3,1000); insert into a_ values('B','23/2/2003',1004,3, 10);
select
client, dt, item_id, pos_basis, qty
from (
select
client, dt, item_id, pos_basis, qty ,
rank() over (partition by dt,item_id,pos_basis
order by dt desc) r
> Problem I have is that as the number of records increase, my query
> would get slower and slower.
> Any solutions to this?
This doesn't surprise me. After all, oracle must do more work.
A solution would be to store the dates precalculated in a table.
hth
Rene Nyffenegger
-- Projektleitung und Entwicklung in Oracle/C++/C# Projekten http://www.adp-gmbh.ch/cv.htmlReceived on Sat Apr 05 2003 - 02:25:10 CST
![]() |
![]() |