![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
сложная выборка в теле процедуры ib [D7, IB 7.0]
KETT © (2005-01-20 21:02:00)Добрый вечер
Помогите пожалуйста кто-нить с запросом. Я окончательно запутался. Структуру базы менять поздно :(
блин, сложно объяснить
Есть две таблицы:
Список накладных
_________________________________
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
С суммированием я вроде бы разобрался, а вот как быть с выборкой последней цены..
Johnmen (2005-01-21 09:15:00) [1]>DrPass © (20.01.05 23:44) [3]
>Только не лучше не поступай так с IB (хотя именно в отношении 7 версии я могу и ошибаться), ее мудрый
>оптимизатор скорее всего будет вызывать подзапрос для каждой обрабатываемой строчки
Вообще говоря, это не зависит от версии и оптимизатора, а зависит от вида запроса...
Deniz (2005-01-21 08:49:00) [2]Цена по последней дате по каждой модели:
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;
может есть какие ошибки(писал без проверки)
DrPass (2005-01-20 23:44:00) [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 версии я могу и ошибаться), ее мудрый оптимизатор скорее всего будет вызывать подзапрос для каждой обрабатываемой строчки
YurikGL (2005-01-20 22:02:00) [4]Не помню, позволяет ли IB так делать, но попробуй делать выборку из процедуры, которая тебе возвращает твой максимум.
KETT (2005-01-20 21:31:00) [5]Может кто знает как в таком случае можно выбрать цену используя максимальный номер накладной ? Что-то вроде "select cost from products where id=max"..