Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/260.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php MySQL顶级订购者(通过电子邮件分组),他们在上个月有订单_Php_Mysql - Fatal编程技术网

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