mysql - 从每个 user_id 获取最旧的时间戳

标签 mysql

“销售”数据库

每个“sold_by”实质上都是进行该特定销售的人。我的目标是获取按“sold_by”分组的最新“sale_date”,为每个唯一的“sold_by”记录返回一条记录(该记录作为整数存储在我的数据库中,但这是一个示例)

╔═════════╦═════════╦══════════════════╗
║ sale_id ║ sold_by ║    sale_date     ║
╠═════════╬═════════╬══════════════════╣
║       0 ║ PETER   ║ 01/01/2017 00:00 ║
║       1 ║ JOHN    ║ 01/01/2017 00:00 ║
║       2 ║ PETER   ║ 30/03/2017 00:00 ║
║       3 ║ JOHN    ║ 03/02/2017 00:00 ║
║       4 ║ SIMON   ║ 04/02/2017 00:00 ║
║       5 ║ JOHN    ║ 05/01/2017 00:00 ║
║       6 ║ SIMON   ║ 26/01/2017 00:00 ║
║       7 ║ PETER   ║ 07/01/2017 00:00 ║
║       8 ║ SIMON   ║ 28/01/2017 00:00 ║
║       9 ║ JOHN    ║ 09/01/2017 00:00 ║
║       0 ║ PETER   ║ 20/01/2017 00:00 ║
╚═════════╩═════════╩══════════════════╝

account_manager_sellers 的数据库示例(请注意,ID 与上表中的 sold_by 匹配。

╔════╦══════════════╗
║ id ║ company_name ║
╠════╬══════════════╣
║  0 ║ PETER        ║
║  1 ║ JOHN         ║
║  2 ║ SIMON        ║
╚════╩══════════════╝

下面的示例可以工作,但没有按预期工作,它没有获取最小或最大日期,但似乎从数据库中间返回一个随机日期。

SELECT `sold_by`, `sale_date`
FROM   `sales`
  NATURAL JOIN (
    SELECT   `sold_by`, MAX(`sale_date`) AS entry_date
    FROM     `sales`
    GROUP BY `sold_by`
  ) AS tmin
  JOIN `account_manager_sellers` USING (`id`)
  WHERE `sale_date` < '2017-03-31 00:00:00';

所以最终,我需要为每个唯一的 sold_by 获取一条记录,但它必须是最近的日期。因此,从上面的第一个表中,它将返回:

+---+-------+------------------+
| 2 | PETER | 30/03/2017 00:00 | 
+---+-------+------------------+
| 3 | JOHN  | 03/02/2017 00:00 | 
+---+-------+------------------+
| 4 | SIMON | 04/02/2017 00:00 |
+---+-------+------------------+

P.S 我还尝试从子查询中删除 MAX(sale_date),并将其替换为 ORDER BY sale_date LIMIT 1 (但显然它只返回一个鞋底)结果)

最佳答案

您想要的基本查询可能如下所示:

SELECT p1.*
FROM plans p1
INNER JOIN
(
    SELECT seller_id, MAX(plan_written) AS entry_date
    FROM plans
    GROUP BY seller_id
) p2
    ON p1.seller_id = p2.seller_id AND
       p1.plan_written = p2.entry_date;

您还有另一个到 account_manager_sellers 表的连接,但由于我看不到您的表定义,不知道您的列等,因此我不会尝试回答该问题.

您可能不希望使用自然联接,因为它们可能会混淆查询中的联接条件。

关于mysql - 从每个 user_id 获取最旧的时间戳,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50153519/

相关文章:

mysql - SQL : Multiple left joins with similar tables

MySQL InnoDB 更改 DELETE CASCADE 上的引用操作

php - 在android中使用json获取服务器上文件夹的文件列表

mysql - 如何在Mac OS 64位上安装MySql 32位?

mySQL 如何逆透视动态列

mysql - 在同一个查询中选择组和用户

mysql_tzinfo_to_sql ORDER BY 错误

mysql - 如何在 MySQL 中的一个原子操作中重命名两个表

mysql - 以正确的顺序使用 mysqldump 转储 View

mysql - 如何使用 perl dbi 和 mysql 压缩数据