【发布时间】:2018-10-18 06:10:03
【问题描述】:
我有一个正在运行但不符合要求的脚本。我的目标是为account_manager_sellers 列表中的每个卖家选择plans 数据库中最近输入的记录。
以下脚本的当前问题是:它返回的是最旧的记录而不是最新的记录,例如:它选择的是 2016 年的记录,而不是时间戳为 2018 年的记录。(最终我需要更改WHERE 子句获取 2017-01-01 之前的所有 lastsale 记录。
简单的数据库示例。
plansAKA(销售名单)
+----+------------------+-----------+
| id | plan_written | seller_id |
+----+------------------+-----------+
| 1 | 20/09/2016 09:12 | 123 |
| 2 | 22/12/2016 09:45 | 444 |
| 3 | 19/10/2016 09:07 | 555 |
| 4 | 02/10/2015 14:26 | 123 |
| 5 | 15/08/2016 11:06 | 444 |
| 6 | 16/08/2016 11:03 | 123 |
| 7 | 03/10/2016 10:15 | 555 |
| 8 | 28/09/2016 10:12 | 123 |
| 9 | 27/09/2016 15:12 | 444 |
+----+------------------+-----------+
account_manager_sellers(卖家名单)
+-----+----------+
| id | name |
+-----+----------+
| 123 | person 1 |
| 444 | person 2 |
| 555 | person 3 |
+-----+----------+
当前使用的代码
SELECT p.plan_written, p.seller_id
FROM plans AS p NATURAL JOIN (
SELECT id, MAX(plan_written) AS lastsale
FROM plans
GROUP BY seller_id
) AS t
JOIN account_manager_sellers AS a ON a.id = p.seller_id
WHERE lastsale < "2018-05-08 00:00:00"
总结
使用上面的代码和示例表,此代码将返回这 3 个结果,虽然我们确实期望 3 个结果,但似乎没有跟随 MAX(plan_written),我的猜测是它与GROUP 子句,我不确定我们是否可以使用 ORDER BY 和 LIMIT 子句?
+--------------+------------------+
| seller_id | plan_written |
+--------------+------------------+
| 123 | 16/08/2016 11:03 |
| 444 | 15/08/2016 11:06 |
| 555 | 03/10/2016 10:15 |
+--------------+------------------+
【问题讨论】:
-
如果只有两个表,为什么要进行两个连接?这不是一种有效的方法。 IMO 你应该从已经加入的表中选择 id 和 max date。