Цитата(lv151 @ 2.10.2013, 15:52 ) | | выборка из таблицы #T1 делилась на группы, в которой данные идут последовательно +1 |
Если мы из значения элемента упорядоченного ряда целых значений вычтем порядковый номер элемента ряда, то получим уникальный идентификатор для каждой группы подряд идущих значений.
то-же самое можно реализвовать для упорядоченного ряда округленных до дня дат, вычитая из даты количество дней, равное порядковому номеру элемента ряда. В этом случае идентификатор группы будет иметь тип даты. на оракле это выглядит так:
| Код | SQL> with t as ( 2 select to_date('01.01.1900','MM.DD.YYYY') dt from dual 3 union all select to_date('01.02.1900','MM.DD.YYYY') dt from dual 4 union all select to_date('01.03.1900','MM.DD.YYYY') dt from dual 5 union all select to_date('01.05.1900','MM.DD.YYYY') dt from dual 6 ) 7 select dt,dt-row_number() over (order by dt) group_id 8 from t 9 order by dt 10 / DT GROUP_ID ----------- ----------- 01.01.1900 31.12.1899 02.01.1900 31.12.1899 03.01.1900 31.12.1899 05.01.1900 01.01.1900
|
Я не знаю что получится если в MS SQL от даты отнять целое. В оракле получится дата меньшая на вычтенное количество дней. В MS, думаю, тоже можно как-то отнять целое количество дней от даты. |