Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2004.10.31;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.49 MB
Время: 0.043 c
4-1096320737
НовичОк
2004-09-28 01:32
2004.10.31
Получение заголовков всех запущенных приложений


14-1097473350
Russel
2004-10-11 09:42
2004.10.31
Странная проблема с открытием файла


1-1097592193
Expl
2004-10-12 18:43
2004.10.31
вызов hlp файла при нажатии на клавишу


1-1098170815
Kat
2004-10-19 11:26
2004.10.31
ИЗВИНЯЮСЬ Есть число типа DOUBLE.


14-1097520189
Vulko
2004-10-11 22:43
2004.10.31
Блок схема алгоритма быстрой сортировки...





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский