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

Вниз

сложная выборка в теле процедуры ib   Найти похожие ветки 

 
KETT   (2005-01-20 21:02) [0]

Добрый вечер
Помогите пожалуйста кто-нить с запросом. Я окончательно запутался. Структуру базы менять поздно :(

блин, сложно объяснить

Есть две таблицы:

Список накладных
_________________________________
ID     Name          Date     Поставщик
1      Накладная-1   04.01.05 Поставщик-1
2      Накладная-2   05.01.05 Поставщик-2
3      Накладная-3   07.01.05 Поставщик-3

Товар
_________________________________
№ накладной  Model    Кол-во  Цена
1            abvgd-1     3     1300
1            dgvba-3     7     7500
3            abvgd-1     5     1150

Необходимо сделать выборку, чтобы получить суммированное кол-во товара с ценой с самого последнего прихода т.е

__________
Model
abvgd-1        8    1150 --- цена с накладной #3
gdvba-3        7    7500

С суммированием я вроде бы разобрался, а вот как быть с выборкой последней цены..


 
KETT   (2005-01-20 21:31) [1]

Может кто знает как в таком случае можно выбрать цену используя максимальный номер накладной ? Что-то вроде "select cost from products where id=max"..


 
YurikGL ©   (2005-01-20 22:02) [2]

Не помню, позволяет ли IB так делать, но попробуй делать выборку из процедуры, которая тебе возвращает твой максимум.


 
DrPass ©   (2005-01-20 23:44) [3]

Если ты пишешь процедуру, то что тебе мешает сделать несколько запросов?
select max(id) from ... into :mid;
select cost from products where id=:mid;

Можно и одним запросом -
select cost from products where id in (select max(id) from ...)
Только не лучше не поступай так с IB (хотя именно в отношении 7 версии я могу и ошибаться), ее мудрый оптимизатор скорее всего будет вызывать подзапрос для каждой обрабатываемой строчки


 
Deniz   (2005-01-21 08:49) [4]

Цена по последней дате по каждой модели:

for
 select t.model, max(n.date)
   from <Товар> t
   inner join <Список накладных> n on (n.nomer = t.id)
   group by t.model
 into :model, :m_date
 do begin
   select t.cost
     from <Товар> t
     inner join <Список накладных> n on (n.nomer = t.id)
     where (t.model = :model) and (n.date = :m_date)
 end;

может есть какие ошибки(писал без проверки)


 
Johnmen ©   (2005-01-21 09:15) [5]

>DrPass ©   (20.01.05 23:44) [3]
>Только не лучше не поступай так с IB (хотя именно в отношении 7 версии я могу и ошибаться), ее мудрый
>оптимизатор скорее всего будет вызывать подзапрос для каждой обрабатываемой строчки

Вообще говоря, это не зависит от версии и оптимизатора, а зависит от вида запроса...



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

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

Наверх




Память: 0.48 MB
Время: 0.033 c
6-1101495209
leonidus
2004-11-26 21:53
2005.02.20
Отличия HTTP-протокола 1.0 от 1.1


1-1107355160
dim-
2005-02-02 17:39
2005.02.20
Передача данных между MDI формами


4-1105113341
Андрей М.
2005-01-07 18:55
2005.02.20
где файлы Outlook Express


3-1106350319
alexproger
2005-01-22 02:31
2005.02.20
ADOConnection.DataSetCount - всегда 0????


6-1102359456
redlord
2004-12-06 21:57
2005.02.20
NetFileEnum