Я использую Netezza. Я работаю с маркетинговыми данными, особенно с купонами. Прямо сейчас я подсчитываю отдельных ежедневных купонов; ничего страшного. Тем не менее, я хотел бы получить количество различных искупителей на сегодняшний день. Обратите внимание, что это не просто сумма ежедневных выкупов, так как клиент может выкупать в разные дни, и, следовательно, сумма ежедневных выкупов может быть несколькими клиентами.
Я закрыл глаза, загадал желание и выполнил следующий запрос, надеясь, что это сработает:
select redemption_date
,count(distinct(customer_id)) as day_redeemers
,count(distinct(customer_id)) over (partition by null rows unbounded preceding) as cml_redeemers
from coupon_history
group by 1
order by 1
Но Netezza жалуется: ОШИБКА [HY000] ОШИБКА: атрибут CUSTOMER_ID должен быть сгруппирован или использован в агрегатной функции.
... и поэтому я закрываю глаза, загадываю желание и выполняю следующее (обратите внимание на добавление в группу):
select redemption_date
,count(distinct(customer_id)) as day_redeemers
,count(distinct(customer_id)) over (partition by null rows unbounded preceding) as cml_redeemers
from coupon_history
group by 1,customer_id
order by 1
Netezza жалуется на следующее:
ERROR [HY000] ERROR: DISTINCT aggregate not allowed in window with ORDER BY or frame specification
Эта ошибка наводит меня на мысль, что внутри Netezza заказывает customer_id для подсчета переходов и, таким образом, различий. Но это оставляет меня в растерянности относительно того, что я должен попробовать дальше. Я надеялся на что-то простое, но видимо сегодня не мой счастливый день.
Любые идеи о том, как заставить мой первоначальный запрос работать, или предложения по альтернативному подходу?
Спасибо!