Понимание работы windows function postgresql
Неработает оконная функция относительно динамически изменяющихся данных->
count("Transaction_ID")
filter (where "Transaction_DateTime" between VP."First_Group_Purchase_Date"
and VP."Last_Group_Purchase_Date") over (partition by VP."Customer_ID") AS TEST2
Каким образом исправить запрос чтобы он работал подобно следующему вызову ->
(select count("Transaction_ID")
from v_periods as ii
join v_history ON ii."Customer_ID" = v_history."Customer_ID" AND
ii."Group_ID" = v_history."Group_ID"
where ii."Customer_ID" = VP."Customer_ID"
and v_history."Transaction_DateTime" between VP."First_Group_Purchase_Date"
and VP."Last_Group_Purchase_Date") AS TEST3
Имеется следующее задание:
Определение общего количества транзакций клиента. Определяется общее количество транзакций клиента, совершенных им между первой и последней транзакциями с анализируемой группой (включая транзакции, в рамках которых не было анализируемой группы), включая первую и последнюю транзакции с группой. Для этого подсчитывается количество уникальных значений в поле Transaction_ID таблицы История покупок, дата совершения транзакций для которых больше или равна дате первой транзакции клиента с группой (значение поля First_Group_Purchase_Date таблицы Периоды) и меньше или равна дате последней транзакции клиента с группой (значение поля Last_Group_Purchase_Date таблицы Периоды).
Имеется следующее решение:
SELECT VP."Customer_ID" AS "Customer_ID",
VP."Group_ID" AS "Group_ID",
count("Transaction_ID")
filter (where "Transaction_DateTime" between '2020-01-26 23:45:29.000000'
and '2020-06-01 00:30:27.000000') over (partition by VP."Customer_ID") AS TEST1,
count("Transaction_ID")
filter (where "Transaction_DateTime" between VP."First_Group_Purchase_Date"
and VP."Last_Group_Purchase_Date") over (partition by VP."Customer_ID") AS TEST2,
"Group_Purchase"::float ,
(select count("Transaction_ID")
from v_periods as ii
join v_history ON ii."Customer_ID" = v_history."Customer_ID" AND
ii."Group_ID" = v_history."Group_ID"
where ii."Customer_ID" = VP."Customer_ID"
and v_history."Transaction_DateTime" between VP."First_Group_Purchase_Date"
and VP."Last_Group_Purchase_Date") AS TEST3
FROM v_periods AS VP
JOIN v_history AS VH ON VP."Customer_ID" = VH."Customer_ID" AND
VP."Group_ID" = VH."Group_ID";
ВОПРОС:
Имеется 3 решения, которые подписаны как TEST 1, 2 и 3. Почему работают решения 1 и 3, но при этом решение TEST 2 выводит количество транзакций в пределах группы равным всем транзакциям для определённого покупателя, я до сих пор не могу понять First_Group_Purchase_Date и Last_Group_Purchase_Date подставляют не то, что от них требуется. На примере 7 группы первого покупателя, это различие сразу видно.



