gpt4 book ai didi

mysql - 从一个表连接到另一个表中选择最近的结果

转载 作者:行者123 更新时间:2023-11-29 05:04:24 24 4
gpt4 key购买 nike

我有两张 table 。

一个表包含客户数据,例如姓名和电子邮件地址。另一个表包含状态更改的日志。

状态日志表如下所示:

+-------------+------------+------------+
| customer_id | status | date |
+-------------+------------+------------+
| 1 | Bought | 2018-07-01 |
| 1 | Bought | 2018-07-02 |
| 2 | Ongoing | 2018-07-03 |
| 3 | Ongoing | 2018-07-04 |
| 1 | Not Bought | 2018-07-05 |
| 4 | Bought | 2018-07-06 |
| 4 | Not Bought | 2018-07-07 |
| 4 | Bought | 2018-07-08 | *
| 3 | Cancelled | 2018-07-09 |
+-------------+------------+------------+

和客户数据:

+-------------+------------+
| id | name | email |
+-------------+------------+
| 1 | Alex | alex@home |
| 2 | John | john@home |
| 3 | Simon | si@home |
| 4 | Philip | phil@home |
+-------------+------------+

我想选择在 7 月 (07) 有“购买”的客户。但排除最近状态从“购买”其他任何东西变为“购买”的客户。

结果应该只有一个客户 (Philip) - 所有其他客户的状态都已更改为最近已购买以外的状态。

我有以下 SQL:

SELECT 
a.customer_id
FROM
statuslog a
WHERE
DATE(a.`date`) LIKE '2018-07-%'
AND a.status = 'Bought'
ORDER BY a.date DESC
LIMIT 1

但这就是我所能得到的!上面的查询只返回一个结果,但实际上可能有多个结果。

感谢任何帮助!

最佳答案

这是一种使用相关子查询获取最新状态记录的方法:

SELECT sl.customerid
FROM wwym_statuslog sl
WHERE sl.date = (SELECT MAX(sl2.date)
FROM wwym_statuslog sl2
WHERE sl2.customer_id = sl.customer_id AND
sl2.date >= '2018-07-01' AND
sl2.date < '2018-08-01'
) AND
sl.status = 'Bought'
ORDER BY sl.date DESC
LIMIT 1;

注意事项:

  • 使用有意义的表别名!也就是说,表名的缩写,而不是任意字母,例如 ab
  • 使用正确的日期算法。 LIKE 用于字符串。 MySQL 有很多可用的日期函数。
  • 在 MySQL 8+ 中,您将使用 ROW_NUMBER()

关于mysql - 从一个表连接到另一个表中选择最近的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51361776/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com