Re[9]: Помогите с запросом... :)))
От: Diego  
Дата: 13.09.06 15:58
Оценка:
Здравствуйте, FunnyRabbit, Вы писали:

S>>Вариаций на тему указанного мной метода группировки. Ту же идею можно выразить через аналитические функции, но это будет менее удачно — поскольку результат потом все равно надо будет сжимать group by-ем. Вариации с другой исходной посылкой, разумеется, есть.


FR>Согласен, что все сводиться в конечном итоге к группировке. Спасибо за урок. Надеюсь что не последний.


Можно и без группировок.

SQL> create table work_data as
  2  (
  3        select to_date ( '01.01.2006', 'dd.mm.yyyy' ) work_date, 10 id_work from dual union all
  4        select to_date ( '02.01.2006', 'dd.mm.yyyy' ) work_date, 10 id_work from dual union all
  5        select to_date ( '03.02.2006', 'dd.mm.yyyy' ) work_date, 20 id_work from dual union all
  6        select to_date ( '04.02.2006', 'dd.mm.yyyy' ) work_date, 20 id_work from dual union all
  7        select to_date ( '05.02.2006', 'dd.mm.yyyy' ) work_date, 20 id_work from dual union all
  8        select to_date ( '03.03.2006', 'dd.mm.yyyy' ) work_date, 50 id_work from dual union all
  9        select to_date ( '04.03.2006', 'dd.mm.yyyy' ) work_date, 10 id_work from dual union all
 10        select to_date ( '05.03.2006', 'dd.mm.yyyy' ) work_date, 10 id_work from dual
 11  );

Table created.

SQL>
SQL> select date_beg, date_end, id_work
  2    from (select wrn, id_work,
  3                 work_date date_beg,
  4                 lead(work_date, 1, work_date) over(partition by id_work order by id_work, work_date) date_end,
  5                 row_number() over(partition by id_work order by id_work, work_date) irn
  6            from (select wd.*, rownum wrn from work_data wd))
  7   where mod(irn, 2) = 1
  8   order by wrn;

DATE_BEG   DATE_END      ID_WORK
---------- ---------- ----------
01.01.2006 02.01.2006         10
03.02.2006 04.02.2006         20
05.02.2006 05.02.2006         20
03.03.2006 03.03.2006         50
04.03.2006 05.03.2006         10

SQL>
SQL> drop table  work_data;

Table dropped.
Re[10]: Помогите с запросом... :)))
От: Softwarer http://softwarer.ru
Дата: 14.09.06 06:26
Оценка:
Здравствуйте, Diego, Вы писали:

D>Можно и без группировок.


Нельзя. Ваш пример точно так же использует группировку, только Вы произвели ее в голове и захардкодили результат.

SQL>> create table work_data as
....
SQL>> drop table  work_data;


Для таких целей во всех смыслах лучше использовать конструкцию WITH либо подзапрос во from.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.