给定一个包含时间戳列的表,我想获取 10 条最新记录,其中特定列是唯一的。
如何做到这一点?
示例:
数据:
purchases
-----------------------------------------------------------------
timestamp first_name last_name customer_id product_name purchase_amount
如何获取最近进行过购买的 5 位客户以及 product_name
和 purchase_amount
?
结果:
James, Jackson, 1234, 'foo', 432.123
Tim, McTimothy, 321, 'bar', 5124.11
Bob, Bobbertson, 55, 'foo', 432.123
Claire, Rando, 191, 'tv', 700.00
Jimbo, Manman, 631, 'ps4', 450.00
我尝试过的:
此查询失败,因为它需要对 product_name
和 purchase_amount
进行聚合,但我们不需要聚合,只需要最新值。
SELECT first_name, last_name, customer_id, product_id
FROM purchases
GROUP BY first_name, last_name, customer_id
ORDER BY timestamp DESC
LIMIT 10
最佳答案
我认为这可以做到:
SELECT p.*
FROM
(
SELECT customer_id, MAX(timestamp) last_purchase_time
FROM purchases
GROUP BY customer_id
ORDER BY MAX(timestamp) DESC
LIMIT 5
) lp
INNER JOIN purchases p ON p.customer_id = lp.customer_id and p.timestamp = lp.last_purchase_time
嵌套查询获取每个客户的最后购买时间,并进一步将嵌套结果集限制为最近的 5 个客户。然后,我们将其连接 repo 买表,以便我们可以看到每个客户上次购买的完整购买数据。这确实假设客户不能在完全相同的情况下进行两次购买,但这可能是安全的。
关于mysql - SQL - 获取10条记录,按列排序,其中一些列是唯一的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43600787/