2017-08-08 72 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'上添加複合索引。 –

相關問題