2017-08-08 73 views

回答

2

您当前的查询已显示正在工作,q.v.在这里:

Demo

我不知道为什么你的当前查询不产生你所期望的结果。根据您的ORDER BY声明,它应该为每个客户返回一个不同的记录,对应于最近的记录。

在任何情况下,如果它不做你想要的,另一种方法是使用ROW_NUMBER()这里有一个用户分区。内部查询为每个用户分配一个行号,值1将转到每个用户的最近记录。然后,外部查询只保留最新的记录。

SELECT 
    t.customer_id, 
    t.created_at, 
    t.text 
FROM 
(
    SELECT *, 
     ROW_NUMBER() OVER (PARTITION BY customer_id ORDER BY created_at DESC) rn 
    FROM likes 
) t 
WHERE t.rn = 1 

为了加快其采用ROW_NUMBER()你可以尝试在customer_idcreated_at列添加复合索引内查询:

CREATE INDEX yourIdx ON likes (customer_id, created_at); 
+0

是啊,这是伟大的。有关如何加速的建议?现在大约需要30秒。 –

+0

尝试在'customer_id'和'created_at'上添加复合索引。 –

相关问题