Полагаю, я немного запутался, но вот мой выбор.Было бы полезно, если бы вы показали пример вывода с вашим вопросом.Я также не вижу никакой связи с ardate8n
и не совсем понимаю, как ss.weekno = s.weekno - 1
работает для вас.Надеюсь, это поможет как-то.Если это не отвечает вашим целям, пожалуйста, расширите свой ответ, включив в него ожидаемый результат, определения таблиц и то, что именно вы пытаетесь достичь.
По сути это звучит так, как будто у вас есть sales
, product
и productfamily
таблица и необходимо сообщать о средних продажах всех продуктов в семействе продуктов за данную неделю (будь то текущая неделя или предыдущая).Если я правильно понимаю, следующий SELECT должен сработать и быть довольно быстрым, однако он даст вам все продукты и каждую неделю.
SELECT p.prodno, f.familycode, s.custno, s.weekno, AVG( s.sell ) as sales_avg
FROM sale s
JOIN product p USING(prodno)
JOIN productfamily f USING(prodno)
GROUP BY s.weekno, f.familycode, p.prodno
ORDER BY s.weekno
Теперь, превратите это в представление.
CREATE VIEW "main"."view_weekly_product_sales_avg" AS
SELECT p.prodno, f.familycode, s.custno, s.weekno, AVG( s.sell ) as sales_avg
FROM sale s
JOIN prod p USING(prodno)
JOIN prodfamily f USING(prodno)
GROUP BY s.weekno, f.familycode, p.prodno
ORDER BY s.weekno;
Затем запросите представление / отчет, как вам нужно.Из вашего примера, я думаю, вы бы запросили его так:
SELECT prodno, custno, sales_avg
FROM view_weekly_product_sales_avg
WHERE familycode = 1 AND custno = 1 AND weekno = 1
Для меня это выдает следующую таблицу:
prodno custno sales_avg
1 1 37.3333333333333
2 1 12.0
3 1 78.0
8 1 12.0