2015-07-28 3 views
0

У меня есть SQL-запрос, который выглядит следующим образом:вызов функции окна требует пункт OVER

UPDATE people p 
SET p.email = (SELECT 
       MAX(FIRST_VALUE(email)) OVER (PARTITION BY person_id ORDER BY updated_at DESC) 
       FROM person_emails pe 
       WHERE pe.person_id = p.id); 

возвращается ошибка:

window function call requires an OVER clause 

почему?

Edit:

Я обновил запрос на что-то вроде этого:

UPDATE people p 
    SET p.email = (
    SELECT MAX(
     FIRST_VALUE(email) OVER (PARTITION BY person_id ORDER BY updated_at DESC) 
    ) 
    FROM person_emails pe WHERE pe.person_id = p.id 
); 

теперь возвращает:

ERROR: aggregate function calls cannot contain window function calls 
LINE 4:  FIRST_VALUE(email) OVER (PARTITION BY person_id ORDER ... 
      ^

ответ

3

Try:

UPDATE people p 
    SET p.email = (
    SELECT MAX(first_email) 
    FROM (
    SELECT FIRST_VALUE(email) AS first_email, person_id OVER (PARTITION BY person_id ORDER BY updated_at DESC) 
     FROM person_emails pe 
    ) AS q 
    WHERE q.person_id = p.id 
); 
+0

Я обновил запрос на что-то вроде этого: UPDATE люди р SET p.email = ( SELECT MAX ( FIRST_VALUE (электронная почта) НАД (PARTITION BY person_id ORDER BY DESC updated_at) ) ОТ person_emails ре ГДЕ pe.person_id = p.id ); Теперь он возвращает: ОШИБКА: вызовы функций агрегата не могут содержать вызовы функций окна LINE 4: FIRST_VALUE (email) ПЕРЕДАЧА (PARTITION by person_id ORDER ... –

+0

@ MateuszUrbański Да, эта ошибка звучит разумно, я должен был это видеть. Исправлено , –

Смежные вопросы