我有MySQL表名daily_transactions,其中有五列
id | username | credit | debit | transaction_date
如果用户将$ 100记入帐户,则会插入表格中;如果有借记卡(如果用户使用我们的服务,假设说$ 20),也会记录该帐户,就像银行对帐单一样历史作品。
现在的问题是,在过去的3个月中,如何获得信用总额在$ 500到$ 2000之间的用户列表。也就是说,将每位用户的所有信用额相加,如果最近3个月内至少有$ 500至$ 2000,请显示该信用额。
如果在下面尝试过此查询,但无法正常工作
SELECT username,
SUM(debit)
FROM daily_transactions
WHERE sum(credit) >=500
AND SUM(credit)<=2000
AND DATEDIFF(NOW(),date_details)<=90;
答案 0 :(得分:1)
您需要一个HAVING
子句:
SELECT username,SUM(debit)
FROM daily_transactions
WHERE date_details >= CURDATE() - INTERVAL 90 DAY
GROUP BY username
HAVING SUM(credit) >= 500 AND SUM(credit) <= 2000
请注意,日期过滤发生在WHERE
子句中。在GROUP BY
中HAVING
的之后进行总计过滤。
我还更改了日期比较以避免使用该功能。这样可以使用索引。
答案 1 :(得分:1)
Having
是一个群组过滤器,因此您需要在这里
SELECT username,SUM(debit)
FROM daily_transactions
WHERE DATEDIFF(NOW(),date_details)<=90;
group by username
having sum(credit) >=500 AND SUM(credit)<=2000