Вот один подход:
SELECT
SUM(Color) AS color,
ROUND(AVG(CASE WHEN trandate < NOW() - INTERVAL '90 DAYS'
THEN Color END)) AS avg_color
FROM "color_table";
Это интерпретирует ваше требование как стремление к среднему значению записей, для которых trandate
старше 90 дней. Если вместо этого вы хотите в течение в течение последних 90 дней, отмените неравенство.
Если вы используете Postgres 9.4 или новее, вы также можете использовать предложение FILTER
:
SELECT
SUM(Color) AS color,
ROUND(AVG(Color) FILTER (WHERE trandate < NOW() - INTERVAL '90 DAYS')) AS avg_color
FROM "color_table";