Как сохранить временное значение в запросе Postgresql, а затем использовать его несколько раз?

#postgresql

#postgresql

Вопрос:

У меня есть этот простой запрос:

 SELECT COUNT(*)
FROM CompressorAlerts
WHERE CAST('2020-09-20' as timestamp) IS NULL OR faultTimestamp >= CAST('2020-09-20' as timestamp)
  

(Я жестко 2020-09-20 запрограммирован… это действительно значение, которое я получаю откуда-то еще, не имеющее отношения к этому вопросу, но я жестко запрограммировал его для простоты).

Как вы можете видеть, я повторяю дважды CAST('2020-09-20' as timestamp) . Я хочу избежать этого, поэтому я попытался сделать это:

 WITH myDate as (SELECT CAST('2020-09-20' as timestamp))
SELECT COUNT(*)
FROM CompressorAlerts
WHERE myDate IS NULL OR faultTimestamp >= myDate
  

Однако я получаю эту ошибку : column "mydate" does not exist .

Как я могу ссылаться на myDate значение, которое я определил в WITH предложении? Я делаю что-то не так?

Комментарии:

1. Если дата на самом деле является параметром, то почему вы не можете использовать where ? is null or faulttimestamp >= ? (или любой другой заполнитель параметра, который вы используете)

Ответ №1:

mydate это имя CTE, а не имя выражения столбца внутри него. Кроме того, вам необходимо включить CTE в FROM часть запроса.

 WITH params (mydate) as (
  values (timestamp '2020-09-20')
)
SELECT COUNT(*)
FROM CompressorAlerts, params
WHERE mydate IS NULL 
   OR faultTimestamp >= mydate