Php MySQL顶级订购者(通过电子邮件分组),他们在上个月有订单
我正试图通过电子邮件找到顶级买家。我是这样做的:Php MySQL顶级订购者(通过电子邮件分组),他们在上个月有订单,php,mysql,Php,Mysql,我正试图通过电子邮件找到顶级买家。我是这样做的: SELECT email, MAX(dt) FROM orders GROUP BY email ORDER BY COUNT(*) DESC; 这样做有效,我通过电子邮件将顶部的重复行分组。因此,通过电子邮件排名靠前,按降序排列 我现在要面对的是,只有不到一个月前的订单 我尝试了以下方法,但出现了一个错误: SELECT email, MAX(dt) FROM orders WHERE TIMESTAMPDIFF(MONTH,MAX(dt),
SELECT email, MAX(dt) FROM orders GROUP BY email ORDER BY COUNT(*) DESC;
这样做有效,我通过电子邮件将顶部的重复行分组。因此,通过电子邮件排名靠前,按降序排列
我现在要面对的是,只有不到一个月前的订单
我尝试了以下方法,但出现了一个错误:
SELECT email, MAX(dt) FROM orders WHERE TIMESTAMPDIFF(MONTH,MAX(dt),NOW()) < 1 GROUP BY email ORDER BY COUNT(*) DESC;
错误:
组函数的使用无效
我还尝试过在现在和现在之间使用WHERE MAXdt——间隔1个月,我得到了相同的错误
有人知道如何在MySQL中实现这一点吗
aim仅针对上个月有订单的客户提供顶级订单
SELECT email, MAX(dt) last_order_time
FROM orders all_orders
JOIN (SELECT DISTINCT email
FROM orders
WHERE TIMESTAMPDIFF(MONTH, dt, NOW()) < 1) recent
USING (email)
GROUP BY email
ORDER BY COUNT(*) DESC
或:
第二个版本更简单,但效率可能更低,因为它先计算所有电子邮件的计数和最大值,然后再过滤掉没有最近订单的电子邮件。我想您需要TIMESTAMPDIFF…..您的dt列的格式是什么。我相信MySQL不喜欢WHERE子句中的聚合MAXdt。请看这篇文章。要当心吃东西。将所有电子邮件分组并选择每个电子邮件的最大订购时间后,mysql将迭代所有结果,并按字段排序。这远远不够有效。dt的类型为DateTime您是要计算上个月的电子邮件数量,还是要计算一段时间内的所有电子邮件数量?在所有时间内,但只显示最后一次订购MAXdt的时间不到一个月。这在查询中可行吗?使用会让人很困惑:-谢谢,我现在正在用它进行测试!这很好,非常感谢!我选择加入。
SELECT email, MAX(dt) last_order_time
FROM orders
GROUP BY email
HAVING TIMESTAMPDIFF(MONTH, last_order_time, NOW()) < 1
ORDER BY COUNT(*) DESC