Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Запрос SQL [D7, IB6.x]


asail ©   (2006-07-17 18:45:00) 

Здрасте!!! Нужна помощь в составлении запроса...
Есть таблица вида
ID  DATE  PRICE
надо получить таблицу (результат) вида
ID  DATE1  PRICE1  DATE2  PRICE2
где две строки исходной таблицы с максимальнамидатами превращаются в одну соответствующую запись. И так для всех ID.
Надеюсь, понятно объяснил...


Johnmen   (2006-07-18 10:25:00) [1]

Мдя... Тяжёлый случай...:)
Да и ладно


Asail   (2006-07-18 09:48:00) [2]

Короче говоря, надо повторить все строки исходной таблицы, но добавить к ним еще одно поле с предыдущим (последним) значением цены (если такая есть). Вот и все.
Кстати, как мне кажется, я нашел решение. Проведу тесты, и если да, то выложу сюда.
Но все равно буду признателен за другие варианты (возможно, более оптимальные).


Sergey13   (2006-07-18 09:41:00) [3]

2 [10] Asail   (18.07.06 00:11)
> понятно, что для некоторых товаров в исходной таблице может
> быть всего одна строка (т.е. цена не менялась вообще).
А может быть 8 или например 16 (обвал цен). Как это обрабатывать?


Johnmen   (2006-07-18 09:32:00) [4]

Ещё раз. Постановказадачи мне уже не интересна.
Приводи пример исходных данныхи результирующегонабора данных.
Что такое исходные ДАННЫЕ надо пояснить?


Asail   (2006-07-18 00:11:00) [5]

А это и есть исходные данные. Задача такая: в приведенной выше таблице (полей там несколько больше, но к делу они не относятся) хранится история изменения цен на различные товары (код товара - поле "ID"). Задача - отобразить за указанный период времени как менялись цены для каждого товара. Результирующая таблица должна выглядеть примерно (опускаем дополнительные поля с описанием товаров) так:
ID    CHANGING_DATE    NEW_PRICE     OLD_PRICE
понятно, что для некоторых товаров в исходной таблице может быть всего одна строка (т.е. цена не менялась вообще). В таком случае OLD_PRICE должен быть NULL или 0.
Буду признателен за помощь.


Johnmen   (2006-07-17 22:30:00) [6]

Приводи пример исходных данных и результирующего набора данных.
Данные должны быть показательными, охватывающими все возможные варианты...


Asail   (2006-07-17 21:48:00) [7]


> 1. Что такое СП?

Обшипка вышла - это ХП.

> 2. Возможно, но радости не доставит...:)

Это плохо... База не моя - ХП для данного отчета мне туда впихнуть вряд-ли дадут :-(. Надо-бы все на клиенте делать. Есть идеи какие-нибудь?


Fay   (2006-07-17 20:12:00) [8]

2 asail   (17.07.06 19:53) [5]
> А без СП? Вообще, возможно такое?
На IB - нет


Johnmen   (2006-07-17 20:12:00) [9]


> PEAKTOP ©   (17.07.06 19:15) [2]


Тема FIRST в плоскости IB6 не раскрыта...


> asail   (17.07.06 19:53) [5]
> А без СП? Вообще, возможно такое?


1. Что такое СП?
2. Возможно, но радости не доставит...:)


asail   (2006-07-17 19:53:00) [10]

А без СП? Вообще, возможно такое?


Fay   (2006-07-17 19:34:00) [11]

2 PEAKTOP ©   (17.07.06 19:15) [2]
Зачем DISTINCT ?


PEAKTOP   (2006-07-17 19:17:00) [12]

Ну а дальше -

select * from my_proc;


PEAKTOP   (2006-07-17 19:15:00) [13]

ДОПУСТИМ, ТВОЯ ТАБЛИЦА НАЗЫВАЕТСЯ TMC_PRICE


CREATE PROCEDURE MY_PROC
RETURNS(
 ID INTEGER,
 DATE1 TIMESTAMP,
 PRICE1 NUMERIC(15,3),
 DATE2 TIMESTAMP,
 PRICE2 NUMERIC(15,3)
)
AS
BEGIN
 FOR SELECT DISTINCT TTP.ID, MAX(TTP."DATE") FROM TMC_PRICE TTP GROUP BY TTP.ID INTO :ID, :DATE1 DO
   BEGIN
   SELECT TP.PRICE
   FROM    TMC_PRICE TP
   WHERE  (TP.ID = :ID)
      AND   (TP."DATE" = :DATE1)
   INTO   :PRICE1;
   
   SELECT FIRST 1 TP."DATE", TP.PRICE
   FROM    TMC_PRICE TP
   WHERE  (TP.ID = :ID)
      AND   (TP."DATE" IN (SELECT MAX(TTP."DATE") FROM TMC_PRICE TTP WHERE (TTP."DATE" < :DATE1)))
   INTO    :DATE2, :PRICE2;
   END
END


Fay   (2006-07-17 19:05:00) [14]

2 asail   (17.07.06 18:45)
> Надеюсь, понятно объяснил...
OK, всё ясно. Выкладывай остальные 2 желания!


Наверх

Титульная страница Поиск, карта сайта Написать письмо