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

ランクウィンドウ関数を使用したPostgresUPDATE

    一意のキーがないため、ctidを使用してください :

    update medias m
        set sort_order = new_sort_order
        from (
            select 
                ctid,
                owner_user_id, 
                sort_order, 
                row_number() over w as new_sort_order 
            from medias 
            where visible
            window w as (partition by owner_user_id order by sort_order asc, created_at asc)
        ) s
        where m.ctid = s.ctid;
    

    row_number()に注意してください rank()よりも優れている可能性があります 最初のものは決して重複を与えないので。



    1. テーブルの列が作成された日時を検索します

    2. MySQL整数0とNULL

    3. 2つの日付に含まれる暦月数を計算します

    4. (sqlまたはpostgresqlで)任意の行に隣接する行を選択するにはどうすればよいですか?