Używanie funkcji okna w instrukcji aktualizacji
Mam dużą tabelę PostgreSQL, do której uzyskuję Dostęp poprzez Django. Ponieważ ORM Django nie obsługuje funkcji okien, muszę upiec wyniki funkcji okien w tabeli jako zwykłą kolumnę. Chcę zrobić coś takiego:
UPDATE table_name
SET col1 = ROW_NUMBER() OVER ( PARTITION BY col2 ORDER BY col3 );
Ale dostaję ERROR: cannot use window function in UPDATE
39
1 answers
Błąd pochodzi z postgres nie django. Możesz to przepisać jako:
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;
Lub alternatywnie:
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;
To działa. Właśnie testowałem na postgres-9.6. Oto składnia UPDATE (Zobacz opcjonalny fromlist ).
Mam nadzieję, że to pomoże. 63
Author: Max,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-15 20:10:48
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-15 20:10:48