Я пытаюсь выяснить, есть ли более эффективный способ подсчета постоянных клиентов.Сложность состоит в том, что я хочу фильтровать клиентов на основе платежей в день, удаляя при этом вторичные записи, которые происходят для данного клиента более чем за один день.Набор данных включает записи для клиентов в тот же день, но в разное время.Я хочу только посчитать 1 и только 1 платеж в день.Например, учитывая следующие значения для (payment_id, customer_id, payment_date), я хочу счет 2
(17504, 341, '2007-02-16 17:23:14'),
(17505, 341, '2007-02-16 22:41:45'),
(17506, 341, '2007-02-19 19:39:56')
Как только записи сгруппированы по клиенту и дню, я хочу отфильтровать клиентов, у которых более 3записей, и я хочу вернуть количество.
Мой текущий запрос ниже.Есть ли другой способ сделать это без такого количества вложенных подзапросов?
SELECT (COUNT(*)) AS count_for_customers_with_more_than_3_visits
FROM (
SELECT customer_id
FROM (
SELECT customer_id, date_trunc('day', payment_date) AS day
FROM payments
GROUP BY customer_id, day
) visits_by_day
GROUP BY customer_id
HAVING COUNT(day) > 3
) sub;
Я использую Postgres v9.6
Данные и запросы на скрипте SQL