2017-08-08 12 views

答えて

2

あなたの現在のクエリはすでに動作しているようです。q.v.ここでは、あなたの現在のクエリは、あなたが期待する結果を生成していない理由を

Demo

私は知りません。お客様のORDER BYステートメントを受けて、最新のものに対応するすべてのお客様に1つのレコードを返す必要があります。

いずれにしても、それがあなたの望むことをしなければ、代わりに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 

あなたはcustomer_idcreated_at列に複合インデックスを追加してみてくださいすることができますROW_NUMBER()使用し、内側のクエリスピードアップするために:ええ、これは素晴らしいです

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

を。どのようにそれをスピードアップするための任意の提案?今は約30秒かかります。 –

+0

複合インデックスを 'customer_id'と' created_at'の両方に追加してみてください。 –