sql >> データベース >  >> RDS >> PostgreSQL

ユーザーの最後の5つの検索結果のみをテーブルに保持します

    適切な構文マニュアルで詳しく説明されています :

    DELETE FROM history_user h
    USING (
        SELECT pk_id, row_number() OVER (ORDER BY search_time DESC) AS rn;
        FROM   history_user
        WHERE  user_id = 188
        ) sub
    WHERE sub.rn > 5
    AND   h.pk_id = sub.pk_id;
    

    pk_idの場所 一意である任意の(組み合わせの)列です。 。 user_idの可能性があります 、search_time あなたの場合-または、より便利なことに、代理主キー。

    シングルだけ user_id 次のように簡略化できます:

    DELETE FROM history_user h
    USING (
        SELECT pk_id
        FROM   history_user
        WHERE  user_id = 188
        ORDER  BY search_time DESC
        OFFSET 5
        ) sub
    WHERE h.pk_id = sub.pk_id;
    

    一方、複数に対処するには ユーザーを一度に追加するには、PARTITION BYを追加する必要があります ウィンドウ関数へ:

    DELETE FROM history_user h
    USING (
        SELECT pk_id, row_number() OVER (PARTITION BY user_id
                                         ORDER BY search_time DESC) AS rn;
        FROM   history_user
        ) sub
    WHERE sub.rn > 5
    AND   h.pk_id = sub.pk_id;
    



    1. PHPを使用したバッチ挿入

    2. 照合とはどういう意味ですか?

    3. WHERE条件の値のリストを含むパンダのread_sql

    4. クエリにGROUPBYがある場合、合計のパーセンテージを取得するにはどうすればよいですか?