我正在尝试使用此查询显示 12 个月的结果:
SELECT
COUNT(DISTINCT user_id) as customers,
SUM(amount)*.01 as amount,
SUM(amount_refunded)*.01 as refunded,
MONTH(MAX(created_at)) as month
FROM `payments`
WHERE `amount` > 0
AND `status` = 'succeeded'
AND `created_at` BETWEEN NOW() - INTERVAL 2 MONTH AND NOW() - INTERVAL 1 MONTH
AND `user_id` IN (SELECT `id` FROM `users` WHERE `created_at` BETWEEN NOW() - INTERVAL 2 MONTH AND NOW() - INTERVAL 1 MONTH);
可以使用 PHP 以编程方式轻松完成此操作,以输出到 HTML 表中,其中每行包含通过递增月份并每次再次查询数据库来显示不同的月份。
我将如何使用 MySQL FOR 循环来使用这个查询呢?这甚至是正确的方法吗?
正如@Rick James 提到的,一个
GROUP BY
函数应该在这里解决问题,您可以使用 This SO Answer将其限制为过去 12 个月。对于您的示例,查询将如下所示:注意:我评论了子查询,
user_id
因为这意味着结果仅适用于那些在去年创建帐户并进行购买的客户,我不确定这是否是您想要的结果。如果是这样,只需取消注释即可。我编辑了子查询,以便它应该以这种方式工作