我有一个正在运行但不符合预期的脚本。我的目标是为 account_manager_sellers
列表中的每个卖家选择 plans
数据库中最近输入的记录。
下面脚本的当前问题是:它返回最旧的记录而不是最新的记录,例如:它选择 2016 年的记录,而不是具有 2018 年时间戳的记录。(最终我需要更改WHERE 子句获取 2017 年 1 月 1 日之前的所有 lastsale
记录。
简单数据库示例。
计划
AKA(销售列表)
+----+------------------+-----------+
| 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_writing
) 似乎没有遵循,我的猜测是它与 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 |
+--------------+------------------+
最佳答案
您的查询中的联接条件已关闭,您应该限制每个卖家的最长日期。此外,您无需加入 account_manager_sellers
表即可获得预期输出:
SELECT p1.*
FROM plans p1
INNER JOIN
(
SELECT
seller_id, MAX(plan_written) AS max_plan_written
FROM plans
WHERE plan_written < '2018-05-08 00:00:00'
GROUP BY seller_id
) p2
ON p1.seller_id = p2.seller_id AND
p1.plan_written = p2.max_plan_written;
关于mysql - 获取子查询中的最大输入日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50231097/