mysql - 获取子查询中的最大输入日期

标签 mysql join subquery

我有一个正在运行但不符合预期的脚本。我的目标是为 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/

相关文章:

mysql - 如何从表名和列名中转义反引号 (´)?

mysql - 获取列与记录的总和

mysql - 使用联接比较数据的最佳方法是什么?

mysql - 使用命名子查询 DELETE FROM

MySQL-任何人都可以解释一下这个查询吗

mysql - 自引用表时删除数据

mysql - 删除2行1条sql语句mysql

php - SQL JOIN有条件地包含多行

mysql - 连接多个信息性/描述性数据库查询

mysql - MySQL Count子查询