Postgres CASE dans ORDER BY en utilisant un alias
J'ai la requête suivante qui fonctionne très bien dans Postgres 9.1:
SELECT users.id, GREATEST(
COALESCE(MAX(messages.created_at), '2012-07-25 16:05:41.870117'),
COALESCE(MAX(phone_calls.created_at), '2012-07-25 16:05:41.870117')
) AS latest_interaction
FROM users LEFT JOIN messages ON users.id = messages.user_id
LEFT JOIN phone_calls ON users.id = phone_calls.user_id
GROUP BY users.id
ORDER BY latest_interaction DESC
LIMIT 5;
Mais ce que je veux faire, c'est quelque chose comme ceci:
SELECT users.id, GREATEST(
COALESCE(MAX(messages.created_at), '2012-07-25 16:05:41.870117'),
COALESCE(MAX(phone_calls.created_at), '2012-07-25 16:05:41.870117')
) AS latest_interaction
FROM users LEFT JOIN messages ON users.id = messages.user_id
LEFT JOIN phone_calls ON users.id = phone_calls.user_id
GROUP BY users.id
ORDER BY
CASE WHEN(
latest_interaction > '2012-09-05 16:05:41.870117')
THEN 0
WHEN(latest_interaction > '2012-09-04 16:05:41.870117')
THEN 2
WHEN(latest_interaction > '2012-09-04 16:05:41.870117')
THEN 3
ELSE 4
END
LIMIT 5;
Et j'obtiens l'erreur suivante:
ERREUR: la colonne "latest_interaction" n'existe pas
Il me semble que je ne peut pas utiliser les alias pour l'ensemble latest_interaction dans la clause order by avec une instruction case.
Existe-il des solutions de contournement pour cela?
source d'informationauteur dwilkie
Vous devez vous connecter pour publier un commentaire.
Essayer de l'enrouler comme une sous-requête:
Le PG manuel dit le COMMANDE PAR expression:
La sous-requête de la solution de @Mahmoud travail, ou vous pouvez créer le COMMANDE PAR à l'aide de l'origine des colonnes messages.created_at ou phone_calls.created_at