Mam następujące kwerendy, która działa świetnie w PostgreSQL 9.1:Postgres sprawie w celu za pomocą aliasu
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;
Ale to, co chcę zrobić, to coś takiego:
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;
I Otrzymaj następujący błąd: BŁĄD: kolumna "najnowsza_interakcja" nie istnieje
Wygląda na to, że nie mogę użyć tego aliasu dla agregatu latest_interaction w porządku według klauzuli z instrukcją CASE.
Czy są jakieś obejścia tego problemu?
Idealne, właśnie tego szukam! – dwilkie
jak to będzie w przypadku zmniejszenia porządku? pls ,,, Próbowałem, ale jego błąd składniowy! –
@ X-Coder Po prostu użyj 'CASE ... END DESC' –