Как выбрать все строки, созданные за последний час? - PullRequest
0 голосов
/ 15 апреля 2020

Мой запрос:

SELECT  * FROM email_operation WHERE cdate = CURRENT_DATE  and ctime  >= (NOW() - INTERVAL '1 hour' )

, чтобы выбрать все строки, созданные за последний час, но он не работает. Выдает ошибку на >=

SELECT  * FROM email_operation WHERE cdate = CURRENT_DATE  and ctime  >= (NOW() - INTERVAL '12 hour' )
> ERROR:  operator does not exist: time without time zone >= timestamp with time zone
LINE 1: ..._operation WHERE cdate = CURRENT_DATE  and ctime  >= (NOW() ...
                                                             ^
HINT:  No operator matches the given name and argument types. You might need to add explicit type casts.

> Time: 0.001s

Ответы [ 3 ]

1 голос
/ 15 апреля 2020

Если вы хотите получить результаты за прошедший час, и вы разделили компоненты даты и времени, то один метод:

WHERE (cdate + ctime) >= NOW() - INTERVAL '1 hour'

Обратите внимание, что это будет работать даже с полуночи до 1:00 утра. К сожалению, вероятно, он не будет использовать индексы. Это может быть проблемой, если у вас много данных. Вот один метод, который по крайней мере будет использовать индекс для cdate:

WHERE cdate IN (CURRENT_DATE, CURRENT_DATE - INTERVAL '1 day') AND
      ( (cdate + ctime) >= NOW() - INTERVAL '1 hour' )
1 голос
/ 15 апреля 2020

Очевидно, ctime - это столбец time, поэтому вы не можете сравнить его с отметкой времени (о чем говорит сообщение об ошибке). Вам нужно использовать current_time вместо:

and ctime >= current_time - interval '1 hour'

Обратите внимание, что это не будет работать должным образом около полуночи.

Кажется, вы разбили дату и время на два столбца (что является плохой идеей), но вы можете объединить их для сравнения метки времени:

and cdate + ctime >= current_timestamp - interval '1 hour'
0 голосов
/ 20 апреля 2020
where (cdate + ctime)::timestamp(0) >= (now() - interval '1 hour')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...