Вниз
Скачать: 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 вся ветка

Скачать: CL | DM;



Память: 0.46 MB
Время: 0.025 c
14-1106855341
Ihor Osov'yak
2005-01-27 22:49
2005.02.20
Ищется антиквариат - QuickReport 1.0c


1-1107347080
Dmitry_04
2005-02-02 15:24
2005.02.20
Скинообразная форма непрямоугольногоя


1-1107752017
dreamse
2005-02-07 07:53
2005.02.20
Как узнать что программа запущена с компакт диска ?


1-1107341229
XAN
2005-02-02 13:47
2005.02.20
Shut Down


6-1102708946
=alexlp=
2004-12-10 23:02
2005.02.20
Как узнать активен ли TServerSocket.




   Наверх