SELECT dates.user_id FROM dates
LEFT JOIN pays ON pays.user_id = dates.user_id
WHERE pays.id IS NULL
GROUP BY dates.user_id
HAVING COUNT(dates.user_id) IN (7,8)
select all dates, join pays, group by user_id, 看包含的不同日期的访问次数是否等于7*支付次数或8*支付次数,(支付次数至少为1),则user进入区间,可以报警。pays 必须有唯一标识符(id),dates 必须有访问日期(date)。
SELECT dates.user_id, COUNT(DISTINCT pays.id)+1 pcount FROM dates
LEFT JOIN pays ON pays.user_id = dates.user_id
GROUP BY dates.user_id
HAVING COUNT(DISTINCT dates.date) IN (7*pcount, 8*pcount)
我们从 dates 中获取所有记录,加入 pays 和 payments,条件是没有付款,按 user_id 分组,看到用户有 7 或 8 节课的相同条件。
您询问了第二个月的访问次数,到目前为止,我想到的最简单的事情是,结果当然是集体农场,但是还可以。
select all dates, join pays, group by user_id, 看包含的不同日期的访问次数是否等于7*支付次数或8*支付次数,(支付次数至少为1),则user进入区间,可以报警。pays 必须有唯一标识符(id),dates 必须有访问日期(date)。
我还没有想到如何以更短、更有效的方式写第二个。