我想弄清楚是否有更有效的方法来计算常客的数量。棘手的部分是我想根据每天的付款过滤客户,同时删除给定客户超过一天的次要记录。该数据集包括同一天不同时间的客户记录。我只想计算 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
最佳答案
这可能不是更高效,但它更短:
SELECT COUNT(*)) AS count_for_customers_with_more_than_3_visits
FROM (SELECT customer_id
FROM payments
GROUP BY customer_id
HAVING COUNT(DISTINCT date_trunc('day', payment_date)) > 3
) sub;
关于sql - 当给定日期和客户存在多个时间戳时,是否可以将每日客户频率过滤器减少到少于 2 个子查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50670372/