作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试通过电子邮件吸引顶级买家。我正在这样做:
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;
错误:
Invalid use of group function
我还尝试过在 NOW() 和 NOW() 之间使用 WHERE MAX(dt) - INTERVAL 1 MONTH
,但出现了相同的错误。
有人知道如何在 MySQL 中完成此操作吗?
目标仅是那些在上个月下过订单的人。
最佳答案
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
或者:
SELECT email, MAX(dt) last_order_time
FROM orders
GROUP BY email
HAVING TIMESTAMPDIFF(MONTH, last_order_time, NOW()) < 1
ORDER BY COUNT(*) DESC
第二个版本更简单,但可能效率较低,因为它会先计算所有电子邮件的计数和最大值,然后再过滤掉最近没有订单的电子邮件。
关于php - MySQL 最高订购者(按电子邮件分组),上个月有订单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20748255/
我是一名优秀的程序员,十分优秀!