Oracle FAQ | Your Portal to the Oracle Knowledge Grid |
Home -> Community -> Usenet -> c.d.o.misc -> Re: [Beginner] Problem with Order by of a date
On 2005-11-08, fmarchioni_at_libero.it <fmarchioni_at_libero.it> wrote:
> Hi all,
> I'm building a query where I need to retrieve just 1 one row,
> which must be that with the highest Date (I mean that which
> is closest to the moment where the query is issued)
>
> SELECT a.lista_campi_tpr, date_import
> FROM CELL_PR cp
> WHERE cp.id_cella = 'PZ81U1'
> AND ROWNUM < 2
> ORDER BY date_import DESC
>
> The Date is date_import.......
> unfortunately that doesn't work..........
> anybody can help me ?
> Thanks
Francesco,
this is a perfect fit for analytic functions:
create table bla_bla (
a date,
b number
);
begin
for i in 1 .. 10 loop
insert into bla_bla values (trunc(sysdate+i), mod(i*11,13));
end loop;
end;
/
select a, b from bla_bla
where rownum = 1
order by a;
-- -- This is wrong because rownum is evaluated before the order by. -- Essentially, it selects ONE (more or less) random row from -- the table and orders it by a. -- Correct -- ======= select a, b from ( select row_number() over (order by a desc) r, a, b from bla_bla ) where r=1; -- This is better because in the inner select, it -- orders a descending and assigns a value to r. -- This value starts with 1 and is incremented by -- 1 for each row. -- The outer select then selects the (desired) row -- whose r = 1. hth Rene -- Rene Nyffenegger http://www.adp-gmbh.ch/Received on Tue Nov 08 2005 - 15:51:19 CST