"销售数据库"
每个" 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替换它(但显然它只返回一个唯一的结果)
非常感谢期待
答案 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
表的另一个加入,但由于我无法查看您的表格定义,因此无法了解您的列等,我不会尝试回答这个问题。
您可能希望不再使用自然连接,因为它们可能会混淆查询中的连接条件。