@Xveeder

Как юзать вычисленные значения в SELECT через AS?

Доброго времени суток!

Вопрос следующий. Допустим, в SELECT мы вычислили некоторое значение (например, через подзапрос) и выводим его для текущего ROW через некий псевдоним. Как в последующей выборке использовать это значение?

Накидал простенький пример. Допустим, я вычел некую разницу между датой в столбце конкретной записи и текущей датой. Затем, мне нужно использовать это значение в конструкции CASE, но проблема в том, что в конструкции CASE нельзя напрямую использовать имя псевдонима (column "minutes_passed" does not exist), хотя имена других столбцов (которые не вычисляются) вполне получается использовать.

SET TIME ZONE 'UTC';

SELECT
    payment_id,
    extract(EPOCH from (now() - updated_at::timestamp) / 60) AS minutes_passed,
    CASE
        WHEN 60 - minutes_passed > 0
            AND 60 - minutes_passed <= 15 THEN 'expires'
        WHEN 60 - minutes_passed > 15 THEN 'success'
        ELSE 'expired'
    END
    AS exp_status
FROM public.payments;


Спасибо.
  • Вопрос задан
  • 91 просмотр
Решения вопроса 1
rozhnev
@rozhnev Куратор тега SQL
Fullstack programmer, DBA, медленно, дорого
CTE:
WITH p AS (
  SELECT
    payments.*,
    extract(EPOCH from (now() - updated_at::timestamp) / 60) AS minutes_passed
  FROM public.payments
) SELECT 
	p.*,
    CASE
        WHEN 60 - minutes_passed > 0
            AND 60 - minutes_passed <= 15 THEN 'expires'
        WHEN 60 - minutes_passed > 15 THEN 'success'
        ELSE 'expired'
    END
    AS exp_status
FROM p;


PostgreSQL CTE
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы