sql >> Databasteknik >  >> RDS >> PostgreSQL

Använda fönsterfunktioner i en uppdateringssats

Felet kommer från postgres not django. Du kan skriva om detta som:

WITH v_table_name AS
(
    SELECT row_number() over (partition by col2 order by col3) AS rn, primary_key
    FROM table_name
) 
UPDATE table_name set table_name.col1 = v_table_name.rn
FROM v_table_name
WHERE table_name.primary_key = v_table_name.primary_key;  

Eller alternativt:

UPDATE table_name set table_name.col1 = v_table_name.rn
FROM  
(
    SELECT row_number() over (partition by col2 order by col3) AS rn, primary_key
    FROM table_name
) AS v_table_name
WHERE table_name.primary_key = v_table_name.primary_key;

Det här fungerar. Testade det precis på postgres-9.6. Här är syntaxen för UPPDATERING (se den valfria från listan ).

Hoppas detta hjälper.




  1. PHP mysql infoga datumformat

  2. SQL Server-sträng till datumkonvertering

  3. Access 2016 For Dummies Cheat Sheet

  4. Grundläggande tabelluttryck, del 9 – vyer, jämfört med härledda tabeller och CTE