- Раз речь идет о генераторе отчетов - посмотрите в сторону связывающего поля:
Поле Link field объединяет данные из нескольких наборов внутри одной полосы. Его используют, когда невозможно получить полный набор данных в одном запросе или скрипте Groovy.
Вы вполне можете одним запросом получать информацию, а во втором максимальную цену, связав по product.id
- Если искать решение именно в одном запросе, то чуть поэксперементировал. В конечном счете выходен медленнее, но в любом случае:
Вы можете сделать агрегацию через left join
...
max(sml.price) as maxi
...
left join ekomerp$StockMovementLine sml on (sml.product = eol.product and sml.price>0)
И добавить условие для sml в where по дате.
Ваш случай не стал бы отдельно описывать, но попробовал запрос на похожей тестовой таблице:
select sml.product_id as product, sml.price as price, sml.date, max(cml.price) as max
from stock_movement_line sml
left join stock_movement_line cml on (cml.product_id = sml.product_id and sml.price > 0)
where
sml.date between to_date('20190314','YYYYMMDD') AND to_date('20190323','YYYYMMDD')
and cml.date between to_date('20190314','YYYYMMDD') AND to_date('20190323','YYYYMMDD')
group by
sml.product_id,
sml.date,
sml.price
order by
sml.date desc
Вроде бы, ничего запрещенного в рамках генератора отчетов/jpql не использовал, так что вполне можно перенести на ваши реалии
result + initial data (33,6 КБ)
data
CREATE TABLE public.stock_movement_line
(
price integer,
product_id integer,
date date
)
WITH (
OIDS=FALSE
);
ALTER TABLE public.stock_movement_line
OWNER TO ivan;
- upd Опять же, поскольку речь идет о генераторе отчетов - у вас есть возможность преобразовать в groovy-шаблон и добавить условия поиска для подзапроса в groovy-код
(select max(sml.price) as maxi from ekomerp$StockMovementLine sml where sml.product.id = eol.product.id and sml.price>0 and sml.date between
<%
out << "function('to_date', ${params['from']}, 'С форматом поразбираться нужно будет') ...etc"
%>
)
Но, скорее всего, все равно придется использовать нативные функции для преобразования даты