#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