Кажется, вы хотите условную агрегацию.Ваш запрос, скорее всего, можно упростить следующим образом:
SELECT
name
AVG(CASE WHEN EXTRACT(YEAR FROM Activity_Date) = 2019 THEN Amount END) avg_price_2019,
SUM(CASE WHEN EXTRACT(YEAR FROM Activity_Date) = 2019 THEN 1 ELSE 0 END) count_2019,
AVG(CASE WHEN EXTRACT(YEAR FROM Activity_Date) = 2018 THEN Amount END) avg_price_2018,
SUM(CASE WHEN EXTRACT(YEAR FROM Activity_Date) = 2018 THEN 1 ELSE 0 END) count_2018
FROM myTable
GROUP BY name
Похоже, вы храните даты в виде строки в формате mm-dd-yyyy
.Вы можете использовать SUBSTR()
для извлечения части года, например:
SELECT
name
AVG(CASE WHEN SUBSTR(Activity_Date, -4) = '2019' THEN Amount END) avg_price_2019,
SUM(CASE WHEN SUBSTR(Activity_Date, -4) = '2019' THEN 1 ELSE 0 END) count_2019,
AVG(CASE WHEN SUBSTR(Activity_Date, -4) = '2018' THEN Amount END) avg_price_2018,
SUM(CASE WHEN SUBSTR(Activity_Date, -4) = '2018' THEN 1 ELSE 0 END) count_2018
FROM myTable
GROUP BY name
Наконец, если вы хотите выполнить фильтрацию по определенному периоду года (с 1 по 17 сентября), тогда выможно добавить предложение WHERE
к запросу.Все еще предполагая, что даты хранятся в виде строк, это может быть:
WHERE SUBSTR(Activity_Date, 1, 5) BETWEEN '09-01' AND '09-17'