Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.10.31;
Скачать: CL | DM;

Вниз

тяжелое условие в ХП   Найти похожие ветки 

 
GanibalLector ©   (2004-10-04 23:22) [0]

Предположим,имею некую таблицу.Формат примерно следующий:
create table pl(id int,pl1 varchar(8),pl2 varchar(8));
Заполненна примерно так:
1 АА400001  АА400002
2 АА400003  АА400004
3 АБ120001  АБ120002
4 АБ120003  АБ120004

Так вот,необходимо получить
1 АА400001 АА400004
2 АБ120001 АБ120004
Ну,т.е. из всего того,что идет подряд необходимо начальный и конечный.


 
Fay ©   (2004-10-04 23:24) [1]

Не интересно (мне) это писать. В чём именно проблема? Босс приказал suspend-ить всю выборку?


 
Zacho ©   (2004-10-04 23:31) [2]

А ещё есть MIN и MAX и до кучи :) FIRST .. SKIP ..


 
GanibalLector ©   (2004-10-04 23:39) [3]

Не интересно (мне) это писать.
И мне тоже :)

З.Ы. Ладно,я сам...Потом покажу,что получилось.


 
Fay ©   (2004-10-04 23:42) [4]

2 GanibalLector ©   (04.10.04 23:39) [3]
Я не выдрючиваюсь - просто устал.


 
Zacho ©   (2004-10-04 23:57) [5]

А чё показывать-то ?
Вот, например, такой вариант:
SELECT * FROM MY_TABLE WHERE
 ID=(SELECT MIN(ID) FROM MY_TABLE) OR
 ID=(SELECT MAX(ID) FROM MY_TABLE)


Или (в ХП):

SELECT FIRST 1 * FROM MY TABLE ORDER BY ID ASC INTO .. ;
SUSPEND;
SELECT FIRST 1 * FROM MY TABLE ORDER BY ID DESC INTO .. ;
SUSPEND;


Можно и ещё что-нибудь придумать ..

Но задача, честно говоря, какая-то странноватая :)


 
jack128 ©   (2004-10-05 00:10) [6]

Zacho ©   (04.10.04 23:57) [5]
почему странная. Эта табличка может быть просто для примера, а в реале ID - date. Получить данные за весь период ведения базы(если архив - накопительный)


 
GanibalLector ©   (2004-10-05 00:14) [7]

2 Zacho ©
спасибо,правда еще не проверял.На форуме завис,как всегда .

А на счет странноватого,так это типа отчет в налоговую :)
Они так хотят.


 
Zacho ©   (2004-10-05 00:36) [8]

Эээ.. Ещё раз посмотрел твой вопрос, и похоже, я неправильно понял условие задачи. Тогда моё решение не правильно.
Опиши задачу более подробно.


 
GanibalLector ©   (2004-10-05 00:42) [9]

Опиши задачу более подробно.
Есть таблица пломб,смотреть в [0].Их тысячи.Так вот,необходимо вывести все пломбы.Если они идут подряд то мин-макс.Для примера :

1 АА780001 АА780002
2 АА780015 АА780345
3 АА780346 АА780347
4 АА940000 АА949999


 
jack128 ©   (2004-10-05 01:06) [10]

GanibalLector ©   (05.10.04 0:42) [9]
то есть нужно объеденить находящиеся рядом диапазоны пломб?
Напрмер было
1 АА780001 АА780010
2 АА780011 АА780345
стало
АА780001 АА780345

так??


 
GanibalLector ©   (2004-10-05 01:14) [11]

2 jack128
Да!!!
Кстати,как с тобой связаться???В ICQ тебя нет.


 
GanibalLector ©   (2004-10-05 01:16) [12]

2  jack128
Только они так
1 АА780001 АА780010
2 АА780011 АА780345
не хранятся.

Они по две в строке.Т.е. :
1 АА780001 АА780002
2 АА780003 АА780004
3 АА780005 АА780006
 ...


 
Zacho ©   (2004-10-05 01:30) [13]

1. По какому правилу формируются номера (или что оно там) пломб ? Т.е. всегда 2 буквы и 6-значное число ? Или есть и другие варианты ?
2. Объединять нужно именно диапазоны с одинаковым буквенным префиксом ?
3. Что значит "подряд" ? По ID или по числу в полях pl1, pl2 ?
4. Почему именно такая структура таблицы ? Т.е. почему именно по 2 пломбы в записи ? Может есть смысл (и возможность) изменить структуру ?
Имхо, при такой структуре без "временной" таблицы не обойтись.


 
GanibalLector ©   (2004-10-05 01:38) [14]

По какому правилу формируются номера (или что оно там) пломб ? Т.е. всегда 2 буквы и 6-значное число ? Или есть и другие варианты ?
да ВСЕГДА 2 буквы и 6 цифр

Объединять нужно именно диапазоны с одинаковым буквенным префиксом ?
Да. Т.е. если
АА999998 АА999999
АБ000001 АБ000002
то обьедениять не так

АА999998-АБ000002
а так
АА999998 АА999999
АБ000001 АБ000002

Что значит "подряд" ? По ID или по числу в полях pl1, pl2 ?
pl1 pl2

Почему именно такая структура таблицы ? Т.е. почему именно по 2 пломбы в записи ? Может есть смысл (и возможность) изменить структуру ?
Это не столь важно.Пусть даже одно поле pl1 и все.На самом деле,структура весьма сложна...я и так упростил.

Имхо, при такой структуре без "временной" таблицы не обойтись.
Естественно.


 
GanibalLector ©   (2004-10-05 21:24) [15]

Ну,в конце концов получилось следующее


CREATE VIEW PL12(PL,D_OPL)
AS
select pl1,d_opl from opl union select pl2,d_opl from opl;



CREATE PROCEDURE TEST(
   ST_DATE DATE,
   END_DATE DATE)
RETURNS (
   MIN_PL INTEGER,
   MAX_PL INTEGER,
   OLD_SER VARCHAR(2))
AS
DECLARE VARIABLE N_PL INTEGER;
DECLARE VARIABLE N_SER VARCHAR(2);
DECLARE VARIABLE PRED_PL INTEGER;
DECLARE VARIABLE PRED_SER VARCHAR(2);
begin
select first 1 substring(pl from 3 for 6),substring(pl from 1 for 2) from pl12
where d_opl between :st_date and :end_date order by pl
into :max_pl,:old_ser ; min_pl=max_pl;
select first 1 substring(pl from 3 for 6),substring(pl from 1 for 2) from pl12
where d_opl between :st_date and :end_date order by pl desc into :pred_pl,:pred_ser ;
for select substring(pl from 3 for 6),substring(pl from 1 for 2) from pl12
 where d_opl between :st_date and :end_date order by pl into :N_PL,:N_SER do
if (n_ser<>old_ser) then begin
                         suspend;
                         old_ser=n_ser;
                         min_pl=n_pl;
                         max_pl=n_pl;
                         end else begin
if ((n_pl=max_pl+1) or (n_pl=max_pl) )  then  max_pl=n_pl; else begin
                              suspend;
                              min_pl=n_pl;
                              max_pl=n_pl;
                                            end
                                  end
if (n_pl=pred_pl and n_ser=pred_ser) then   suspend;
               end



Страницы: 1 вся ветка

Текущий архив: 2004.10.31;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.022 c
1-1097530297
Ezhik
2004-10-12 01:31
2004.10.31
Ход конём


8-1091686439
Ivolg
2004-08-05 10:13
2004.10.31
No MCI device open


14-1097473776
RDA
2004-10-11 09:49
2004.10.31
Script под Inno Setup для исталяции Firebird 1.5


14-1097482918
ORMADA
2004-10-11 12:21
2004.10.31
Зацените прогу


4-1095573471
Bil Bal Dur
2004-09-19 09:57
2004.10.31
Работа с LPT портом в XP