sql - Mysql子查询: Trying to get the last order from a customer

标签 sql mysql subquery

抱歉,也许这是微不足道的,但我找不到办法做到这一点:

表客户

  • 客户编号
  • 客户邮箱
  • customer_newsletter(1=是/0=否)

表顺序

  • 订单编号
  • 客户编号
  • 订单状态(1=ok/0=no_ok)

每个客户可以有零个、一个或多个订单。

我正在尝试查询以获取以下人员的所有电子邮件:

1/还不是客户,他们从未下过订单,但他们想收到我的时事通讯

2/已有客户(对应表中的一个或多个订单)。 但前提是他们最新订单的状态正常 (我不想将时事通讯发送给有问题的客户)

我已经尝试了几种基于具有 MAX 函数的子查询的方法,但找不到好的公式

有什么建议吗? 提前致谢

最佳答案

假设您可以使用最大的订单 ID 作为最近的订单 ID,我认为应该可行:

SELECT c.customer_email
FROM customers c
LEFT OUTER JOIN orders o ON o.customer_id = c.customer_id
WHERE c.customer_newsletter = 1 AND o.customer_id IS NULL
UNION
SELECT c.customer_email
FROM customers c
WHERE customer_id IN 
  (SELECT customer_id FROM orders WHERE order_id IN 
    (SELECT MAX(order_id) FROM orders WHERE order_status = 1 GROUP BY customer_id)
  )

关于sql - Mysql子查询: Trying to get the last order from a customer,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2094208/

相关文章:

java - 如何授予 Java Web 应用程序对 Digital Ocean Droplet 的访问权限

MySQL 每用户转化率

sql - 无法执行存储过程

sql - 使用月份和年份查找范围数据

mysql - 从两个表连接mysql

java - Android 中可以使用 JDBC 连接远程 MySQL 数据库吗?

mysql - 我如何将带有 case 语句的 mysql 数据提取到单独的列中

mysql - SQL 查询统计那些在另一天购买了 3 种以上产品的人在一天内购买了多少产品

objective-c - 我的嵌套 SUBQUERY 谓词有什么问题?

mysql 子查询 - 结果不同时满足