Вниз
Скачать: 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.022 c
4-1105057690
Unleashed
2005-01-07 03:28
2005.02.20
Нагрузка процессора


3-1106634249
Arrows
2005-01-25 09:24
2005.02.20
Структура dbf файла


14-1107166520
Alexander Panov
2005-01-31 13:15
2005.02.20
Блин, флудеры.


1-1107715687
Andrey M
2005-02-06 21:48
2005.02.20
несколько вопросов


14-1106753737
olookin
2005-01-26 18:35
2005.02.20
Не подскажете ли, что такое muxbox?




   Наверх