powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Сломал голову на запросе... Помогите, а?
9 сообщений из 9, страница 1 из 1
Сломал голову на запросе... Помогите, а?
    #32394957
sqliner
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Таблица SMENA:
DATA IDMASTER
01.01 5
02.01 5
03.01 6
04.01 6
05.01 7
06.01 7
07.01 7
08.01 5
09.01 5

Надо получить:
DATAN DATAK IDMASTER
01.01 02.01 5
03.01 04.01 6
05.01 07.01 7
08.01 09.01 5

т.е. сгруппировать по непрерывному IDMASTER

Юзаю D5 + IB 6.0
...
Рейтинг: 0 / 0
Сломал голову на запросе... Помогите, а?
    #32394964
Roman Ignatiev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хранимую процедуру пиши, просто запросом - никак
...
Рейтинг: 0 / 0
Сломал голову на запросе... Помогите, а?
    #32394979
sqliner
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Так ить ... и ХП не могу соорудить. Торможу, а кусок послезавтра уже сдавать клиенту надо. Горе мне.
...
Рейтинг: 0 / 0
Сломал голову на запросе... Помогите, а?
    #32395023
Фотография Павел Воронцов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я не вполне уверен, что такой запрос сработает, поскольку с ФБ не работал ни разу. Синтаксис примерный - просто идея. Ежели паче чаяния не сработеат - обращайтесь, решение найдём.
Код: 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.
CREATE TABLE MASTER (DATA DATA NOT NULL PRIMARY KEY,
             IDMASTER INTEGER NOT NULL);

INSERT INTO MASTER VALUES ('01.01.2004', 5 );
INSERT INTO MASTER VALUES ('02.01.2004', 5 );
INSERT INTO MASTER VALUES ('03.01.2004', 6 );
INSERT INTO MASTER VALUES ('04.01.2004', 6 );
INSERT INTO MASTER VALUES ('05.01.2004', 7 );
INSERT INTO MASTER VALUES ('06.01.2004', 7 );
INSERT INTO MASTER VALUES ('07.01.2004', 7 );
INSERT INTO MASTER VALUES ('08.01.2004', 5 );
INSERT INTO MASTER VALUES ('09.01.2004', 5 );

SELECT M1.DATA AS DATAN, 
(SELECT MIN(M3.DATA)
FROM MASTER M3
WHERE NOT EXISTS (SELECT  1  FROM MASTER M4
                            WHERE M4.IDMASTER = M3.IDMASTER AND
                                       M4.DATA = M3.DATA +  1  DAY) AND
          M3.IDMASTER = M1.IDMASTER AND
          M3.DATA >= M1.DATA
) AS DATAK, 
M1.IDMASTER
FROM MASTER M1
WHERE NOT EXISTS (SELECT  1  FROM MASTER M2
                            WHERE M2.IDMASTER = M1.IDMASTER AND
                                       M2.DATA = M1.DATA -  1  DAY)
...
Рейтинг: 0 / 0
Сломал голову на запросе... Помогите, а?
    #32395030
Sclif
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
.....
RETURNS( IDM INTEGER, DATAN TIMESTAMP, DATAK TIMESTAMP)
.....
FOR SELECT ID MASTER FROM SMENA INTO :IDM DO
BEGIN
 SELECT MIN(DATA) FROM SMENA WHERE IDMASTER=:IDM INTO :DATAN;
 SELECT MAX(DATA) FROM SMENA WHERE IDMASTER=:IDM INTO :DATAK;
 SUSPEND;
END
...


Вообще можно и запросом, наверное. Так вот:

Код: plaintext
1.
SELECT IDMASTER, MIN(DATA) AS DATAN, MAX(DATA) AS DATAK FROM SMENA GROUP BY IDMASTER
...
Рейтинг: 0 / 0
Сломал голову на запросе... Помогите, а?
    #32395034
Sclif
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А, извиняй, в условия не внимательно смотрел :)
...
Рейтинг: 0 / 0
Сломал голову на запросе... Помогите, а?
    #32395080
sqliner
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
> Павел Воронцов.

Спасибо! Ваше решение сработало. Правда, более чем медленно - из таблицы в 336 записей выборка шла 2s 44ms. Но там кругом Plan Natural. Вечерком дома оптимизирую - доложу о результатах.
...
Рейтинг: 0 / 0
Сломал голову на запросе... Помогите, а?
    #32395146
Фотография Павел Воронцов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Насчёт оптимизации - подумайте вот в эту сторону
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
SELECT MM1.DATA AS DATAN, MIN(MM2.DATA) AS DATAK, MM1.IDMASTER
FROM (SELECT M1.DATA, M1.IDMASTER
FROM MASTER M1 LEFT OUTER JOIN MASTER M2 ON 
M2.IDMASTER = M1.IDMASTER AND M2.DATA = M1.DATA -  1  DAY
WHERE M2.DATA IS NULL) MM1 INNER JOIN (SELECT M1.DATA, M1.IDMASTER
FROM MASTER M1 LEFT OUTER JOIN MASTER M2 ON 
M2.IDMASTER = M1.IDMASTER AND M2.DATA = M1.DATA +  1  DAY
WHERE M2.DATA IS NULL) MM2 ON MM1.IDMASTER = MM2.IDMASTER AND MM2.DATA >= MM1.DATA
GROUP BY MM1.DATA, MM1.IDMASTER
...
Рейтинг: 0 / 0
Сломал голову на запросе... Помогите, а?
    #32396032
sqliner
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
> Павел Воронцов

1. SELECT FROM (SELECT...) для IB6.0 не конает. Это наверное для FB.

2. Перекомпилировал индексы в таблице MASTER - тормоза были из-за них
Теперь
exec time = 10ms avg fetch time = 2ms на локале
и
exec time = 20ms avg fetch time = 7ms на удаленном сервере,
что меня устраивает на 120%, поэтому

3. СПАСИБО .

Спасибо также всем поучаствовавшим.
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Сломал голову на запросе... Помогите, а?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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