首页 > 解决方案 > 选择在 PostgresQl 中每月至少支付一次成功和一次失败的用户

问题描述

在此处输入图像描述

如何从这种表中选择每月至少有一次付款成功和一次失败的用户?例如,如果用户在 3 月、4 月和 5 月有付款,并且在 5 月只有 10 次成功付款,我们不想显示该用户,但如果用户每个月有长达 10 个月的付款,则有失败(假)和成功(真)付款,我们想向该用户展示....

在这种情况下,我们只会显示用户 ID 为 1 和 3 的用户

现在我的查询看起来像这样:

SELECT DISTINCT date_trunc('month', paydate)as uniquemonth
     , success
     ,user_id 
FROM payments order by user_id,uniquemonth

标签: sqlpostgresql

解决方案


您可以计算付款失败和成功的不同月份:

select user_id
from t
group by user_id
having count(*) filter (where success) = count(*)  and
       count(*) filter (where not success) = count(*);

您似乎每个月只有一两条记录。如果您有更多并且第一列确实不是本月的第一列,您可以使用count(distinct)

select user_id
from t
group by user_id
having count(distinct date_trunc('month', uniquemonth)) filter (where success) = count(distinct date_trunc('month', uniquemonth)) and
       count(distinct date_trunc('month', uniquemonth)) filter (where not success) = count(distinct date_trunc('month', uniquemonth))

推荐阅读