voixkas

Newbie | Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору Дано: СУБД Oracle 11, таблица "table1": Код: create table table1 ( id_ number(38) not null, date_ date not null, name1 varchar2(30) not null, name2 varchar2(30) not null, clob_ clob ); create unique index ui#table1#set1 on table1 (date_, upper(name1), upper(name2)); alter table table1 add constraint pk#table1#id_ primary key (id_); | Заполняем таблицу: Код: delete from table1; insert into table1 (date_, name1, name2) with names as (select a.name1, a.name2 from (select 'name' || trunc(dbms_random.value(1, 100)) as name1, 'name' || trunc(dbms_random.value(1, 100)) as name2 from dual connect by level <= 100) a) select distinct s.date_, c.name1, c.name2 from (select trunc(dbms_random.value(1, 100)) as nr, to_date('1900.01.01', 'yyyy.mm.dd') + trunc(dbms_random.value(1, 42000)) as date_ from dual connect by level <= 100000) s inner join (select rownum rn, name1, name2 from names) c on c.rn = s.nr; commit; | Необходимо выбрать актуальные значения clob'ов на дату "by_date" для уникальных name1+name2. Вариант №1: Код: select a.date_, a.name1, a.name2, a.clob_ from table1 a where a.date_ = (select max(b.date_) from table1 b where b.name1 = a.name1 and b.name2 = a.name2 and b.date_ <= to_date('2014.03.20', 'yyyy.mm.dd')) | Вариант №2: Код: elect z.date_,z.name1,z.name2,z.clob_ from( select t.date_,t.name1,t.name2,t.clob_,ROW_NUMBER() over (partition by t.name1,t.name2 order by t.date_ desc) rn from TABLE1 t where t.date_ <= to_date('2014.03.20', 'yyyy.mm.dd') ) z where z.rn=1 | Есть ли более быстрые варианты выборки? |