Вниз
Скачать: 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.023 c
4-1104843979
Qware
2005-01-04 16:06
2005.02.20
Серийный номер мат. платы


3-1106123120
Virgo
2005-01-19 11:25
2005.02.20
Как поменять цвет текста у узла в TreeView?


1-1107763970
СержК
2005-02-07 11:12
2005.02.20
Как удалить папку


3-1106419687
stud1
2005-01-22 21:48
2005.02.20
Компоненты ввода даты в базу данных


3-1106654671
atruhin
2005-01-25 15:04
2005.02.20
Как в FIB настроить нестандартный номер порта коннекта




   Наверх