Dense_rank первый Oracle в Postgresql конвертировать

Я пытаюсь преобразовать следующий запрос Oracle в Postgresql. Я мог бы преобразовать остальные блоки, проблема в том, что я не знаю, как преобразовать этот блок:

    SELECT ai.uid
        ,max(ai.OWNER) KEEP (
            dense_rank first ORDER BY ai.AGENT_ID DESC
            ) AS OWNER
        ,max(ai.EMPLOYEE_KEY) KEEP (
            dense_rank first ORDER BY ai.AGENT_ID DESC
            ) AS EMPLOYEE_KEY
        ,max(ai.MANAGER_LOGIN) KEEP (
            dense_rank first ORDER BY ai.AGENT_ID DESC
            ) AS MANAGER
        ,max(ai.CALL_CENTER_NAME) KEEP (
            dense_rank first ORDER BY ai.AGENT_ID DESC
            ) AS CALL_CENTER_NAME
        ,max(ai.CITY) KEEP (
            dense_rank first ORDER BY ai.AGENT_ID DESC
            ) AS CITY

    FROM agent_info ai

    WHERE translate(ai.UID, 'X0123456789', 'X') IS NULL

    GROUP BY ai.UID

1 ответ

Я думаю, что вы можете преобразовать его, чтобы содержать один DENSE_RANK() и сделать MAX всего на первой записи.

SELECT UID,
       MAX(OWNER),
       MAX(EMPLOYEE_KEY),
       MAX(MANAGER),
       MAX(CALL_CENTER_NAME),
       MAX(CITY)
  FROM (SELECT ai.UID,
               ai.OWNER AS OWNER,
               ai.EMPLOYEE_KEY AS EMPLOYEE_KEY,
               ai.MANAGER_LOGIN AS MANAGER,
               ai.CALL_CENTER_NAME AS CALL_CENTER_NAME,
               ai.CITY AS CITY,
               DENSE_RANK () OVER (PARTITION BY ai.UID ORDER BY ai.AGENT_ID DESC) rnk
          FROM agent_info ai
         WHERE TRANSLATE (ai.UID, 'X0123456789', 'X') IS NULL)
 WHERE rnk = 1
GROUP BY UID;
Другие вопросы по тегам