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

时间:2018-05-03 11:04:24

标签: mysql mysqli

"销售数据库"

每个" sold_by"是基本上做出特定销售的人。我的目标是获得最新的" sale_date"按" sold_by"分组为每个独特的" 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        ║
╚════╩══════════════╝

以下示例有效但无法正常工作,它没有获得MIN或MAX日期,但似乎从数据库中间返回一个随机日期。

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替换它(但显然它只返回一个唯一的结果)

非常感谢期待

1 个答案:

答案 0 :(得分:0)

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

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表的另一个加入,但由于我无法查看您的表格定义,因此无法了解您的列等,我不会尝试回答这个问题。

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