А можно ли?

From
Andrey Bogdanov (2:5020/175.2)
To
Alexander Kolpakov
Date
2005-12-13T10:50:30Z
Area
SU.DBMS.SQL
From: "Andrey Bogdanov" <bay73@mail.ru>

Tue Dec 13 2005 08:49, Alexander Kolpakov wrote to All:

Привет!

Вот первое что пришло в голову (и выдает требуемый результат):

select T.Code, T.Date,
       (select max(Date) from Table T1
         where T1.Code=T.Code
           and not exists (select * from Table
                            where Date < T1.Date and Date > T.Date
                              and Code!=T.Code
                          )
        )
  from Table T
 where nvl((select Code from Table
             where Date = (select max(Date) from Table
                            where Date < T.Date)),
           '-') != T.Code;

Вместо '-' надо вставить люббое значение, которое точно не присутствует среди
кодов. Я исходил из предположения, что даты могут быть любыми с произвольными
интервалами. Если же даты идут строго подрд, то можно и попроще.
Можно видимо и несколько изящнее, но это уже на вкус...

 AK> Есть такие данные:
 AK>  Дата       Код
 AK> 01.01.05   05
 AK> 02.01.05   05
 AK> 03.01.05   02
 AK> 04.01.05   02
 AK> 05.01.05   02
 AK> 06.01.05   05
 AK> ..............   .....

 AK> Нужно получить в результате запроса:

 AK> Дата нач.  Дата кон.  Код
 AK> 01.01.05    02.01.05     05
 AK> 03.01.05    05.01.05     02
 AK> 06.01.05    ....               05
 AK> ................  .............      ....

 AK> Т.е. группировку по коду, но только внутри текущего интервала. Если код
 AK> встречается подряд, то группировать, если интервал разрывается другим
 AK> кодом, то новый интервал.

 AK> Если запросом нельзя:(, сделаю через ADO.

Решайте головоломки: http://diogen.h1.ru

--- ifmail v.2.15dev5
 * Origin: FidoNet Online - http://www.fido-online.com (2:5020/175.2)
SEEN-BY: 46/50 50/12 203 450/186 1024 451/30 454/9 4614/20 5000/5000 5001/5001
SEEN-BY: 5010/53 5011/13 5012/23 46 5015/10 28 5019/31 5020/175 400 545 639
SEEN-BY: 5020/715 758 830 1042 1523 1604 2020 2238 4441 5021/3 29 5022/128
SEEN-BY: 5025/3 750 5026/10 45 5027/16 5029/32 5030/115 436 473 556 966 1063
SEEN-BY: 5030/1339 1900 5035/38 5036/34 5040/47 5042/13 5045/7 5047/43 47
SEEN-BY: 5053/16 5054/1 8 9 28 35 37 45 63 67 5055/95 5059/9 5062/1 5069/7
SEEN-BY: 5070/1222 5077/70 5080/68 1003 5082/6 5083/21 5084/32 5085/13
SEEN-BY: 5090/106 5095/20 5099/133 6000/12 254
PATH: 5020/175 4441 545 5054/1 37