powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / SQL-запрос (может просто, но в голову ничего не приходит)
6 сообщений из 6, страница 1 из 1
SQL-запрос (может просто, но в голову ничего не приходит)
    #34335898
vick057
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нужно сделать, именно, в SQL запросе.

Из таблицы:

ID DATE_BEG DATE_END
1 01.01.2006 14.01.2006
1 12.01.2006 16.01.2006
1 17.01.2006 19.01.2006
1 21.01.2006 23.01.2006
1 24.01.2006 31.01.2006


Получить таблицу:

ID DATE_BEG DATE_END
1 01.01.2006 19.01.2006
1 21.01.2006 31.01.2006

Т.е. сгруппировать по неразрывным интервалам.
...
Рейтинг: 0 / 0
SQL-запрос (может просто, но в голову ничего не приходит)
    #34335978
vick057Нужно сделать, именно, в SQL запросе.

Из таблицы:

ID DATE_BEG DATE_END
1 01.01.2006 14.01.2006
1 12.01.2006 16.01.2006
1 17.01.2006 19.01.2006
1 21.01.2006 23.01.2006
1 24.01.2006 31.01.2006


Получить таблицу:

ID DATE_BEG DATE_END
1 01.01.2006 19.01.2006
1 21.01.2006 31.01.2006

Т.е. сгруппировать по неразрывным интервалам.
ИМХО, в SQL-запросе это не сделать, так как, по определению, SQL работает с множествами и порядок следования элементов множества может быть произвольным. Order By действует уже на результат выборки.
Именно для таких случаев используются разные "SQL-языки программирования" типа PL/SQL, T-SQL и т.д.

Твою задачу (правда для номеров телефонов, а не для дат, но это мелочи) я решил через Хранимую Процедуру (она на PL/SQL, но, думаю, разобраться несложно):
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
create or replace procedure Collapse is
teln1 tel_tmp.tl_n%type;
telk1 tel_tmp.tl_k%type;
teln2 tel_tmp.tl_n%type;
telk2 tel_tmp.tl_k%type;
idf1 tel_tmp.id_fao%type;
idf2 tel_tmp.id_fao%type;
cursor tmp is select distinct * from tel_tmp order by tl_n;

-- tel_tmp = исходная таблица (интервалы не свернуты)
-- telefons = итоговая таблица (интервалы свернуты)
-- tl_n = начало интервала; tl_k = конец интервала

begin

  delete from telefons;
  commit;
  
  open tmp;
  fetch tmp into teln1,telk1,idf1;
  
  loop
  begin
    fetch tmp into teln2,telk2,idf2;    
    exit when tmp%notfound;
    if (teln2-telk1)<= 1  then
      if telk1<=telk2 then
       telk1:=telk2;
      end if;
    else
      insert into telefons(tl_n,tl_k,id_fao) values (teln1,telk1,idf1);
      teln1:=teln2;
      telk1:=telk2;
      idf1:=idf2;
    end if; 
  end;
  end loop;

  close tmp;
  
  insert into telefons(tl_n,tl_k,id_fao) values (teln1,telk1,idf1);  
  commit;
  
exception
   when others then
     sys.dbms_output.put_line('No data found');
    
end Collapse;
...
Рейтинг: 0 / 0
SQL-запрос (может просто, но в голову ничего не приходит)
    #34336140
vick057
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да, согласен с тобой, одним SQL не обойтись.

В алгоритме разобрался, реализовать не проблема.

Спасибо за помощь!
...
Рейтинг: 0 / 0
SQL-запрос (может просто, но в голову ничего не приходит)
    #34336631
Maltsev Max
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Станислав С
ИМХО, в SQL-запросе это не сделать, так как, по определению, SQL работает с множествами и порядок следования элементов множества может быть произвольным. Order By действует уже на результат выборки.


Станислав С , В оракле есть замечательная функция OVER, которая

Не требует наличия Group By

Позволяет определить окно и сортировку в нем...

Очень интересная функция ...
...
Рейтинг: 0 / 0
SQL-запрос (может просто, но в голову ничего не приходит)
    #34336838
vick057
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А в DB2 есть что-нибудь подобное?
Over нету, я посмотрел.
...
Рейтинг: 0 / 0
SQL-запрос (может просто, но в голову ничего не приходит)
    #34340602
Maltsev Max
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
vick057А в DB2 есть что-нибудь подобное?
Over нету, я посмотрел.

Нет.
Это Оракловая фича ...
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / SQL-запрос (может просто, но в голову ничего не приходит)
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]