У меня есть таблица с заказами наших клиентов:
order_date: дата заказов (которая не является уникальной, поскольку каждый заказ может иметь более одного продукта)
customer_id: который не уникален
Я хочу рассчитать количество заказов для каждого клиента до текущей даты_ заказа, но, поскольку в дате_ заказа есть дубликаты, результаты не являются разумными.
Я использую оконные функции в Postgres 11.2
CREATE TABLE "public"."orders" (
"order_date" timestamp,
"customer_id" integer
);
Вставка для данных:
INSERT INTO "public"."orders"("order_date", "customer_id") VALUES('2018-12-13 20:45:24.571964', 402) RETURNING "order_date", "customer_id";
INSERT INTO "public"."orders"("order_date", "customer_id") VALUES('2018-12-13 20:45:24.571964', 402) RETURNING "order_date", "customer_id";
INSERT INTO "public"."orders"("order_date", "customer_id") VALUES('2018-10-12 20:08:39.635959', 466) RETURNING "order_date", "customer_id";
INSERT INTO "public"."orders"("order_date", "customer_id") VALUES('2018-11-04 22:15:14.905851', 483) RETURNING "order_date", "customer_id";
INSERT INTO "public"."orders"("order_date", "customer_id") VALUES('2018-11-04 22:15:14.905851', 483) RETURNING "order_date", "customer_id";
INSERT INTO "public"."orders"("order_date", "customer_id")
Я использовал эти коды для генерации того, что я хочу, но это не работает
select *,COALESCE(COUNT(*) OVER (partition by orders.customer_id order by orders.order_date range between interval '100 years' PRECEDING AND
CURRENT ROW EXCLUDE CURRENT ROW),0) AS
customer_orders_count_up_to_now,
COALESCE(COUNT(*) OVER (partition by orders.customer_id order by
orders.order_date asc range BETWEEN interval '7 days' PRECEDING
AND CURRENT ROW EXCLUDE CURRENT ROW),0) AS
customer_orders_last_seven_days
from orders
Я ожидаю, что выходные столбцы для customer_orders_count_up_to_now и customer_orders_last_seven_days будут составлять 0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0
но фактические значения отличаются из-за дубликатов в order_date.