Объедините дату Часовой пояс и оглянитесь назад на 10 минут

#postgresql

Вопрос:

Я довольно новичок в Postgresql, но у меня все еще есть некоторые вопросы. У меня есть таблица с двумя столбцами, которые мне нужно отфильтровать по:

mlx_date-дата (тип данных) mlx_time-время (время без часового пояса)

Мой вопрос таков

 SELECT    ip_visit_1.ipv1_firstname,   ip_visit_1.ipv1_lastname,   ip_visit_1.ipv1_num,   ns_medication.mlx_date,   ns_medication.mlx_time,   ns_medication.mlx_item FROM  ns_medication  INNER JOIN  ip_visit_1  ON   ns_medication.mlx_acctnum = ip_visit_1.ipv1_num  WHERE TO_CHAR(ns_medication.mlx_date ns_medication.mlx_time, 'YYYYMMDDHHMISS') gt;= CURRENT_TIME - INTERVAL '10' MINUTE   

Сообщение об ошибке-оператор не существует: текст gt;= время с часовым поясом СТРОКА 16: …lx_date ns_medication.mlx_time, ‘YYYYMMDDHHMISS’) gt;= ТЕКУЩИЙ… ^ ПОДСКАЗКА: Ни один оператор не соответствует заданному имени и типу(типам) аргументов. Возможно, вам потребуется добавить явные приведения типов.

Я не могу найти ничего, что позволило бы мне объединить эти две колонки и найти что-либо за последние десять минут. У кого — нибудь есть предложение о функции, которую я мог бы попробовать использовать?

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

1. Избавьтесь от to_char() бесполезного с самого начала и причины вашей ошибки. ns_medication.mlx_date ns_medication.mlx_time уже вернет a timestamp , с которым вы можете напрямую сравнить current_date

2. Если я сделаю ns_medication.mlx_date ns_medication.mlx_time gt; = CURRENT_DATE — ИНТЕРВАЛ ’10’ МИНУТ, он вернет все с сегодняшней даты, а не в течение последних десяти минут.

3. Вам нужно использовать current_timestamp не current_date , если вы хотите последние 10 минут

4. В связи с этим возникает вопрос, почему бы не создать timestamp with time zone колонку, объединяющую эти два аспекта? Тогда вам нужно будет посмотреть только на одну колонку. Вы можете разложить этот столбец, чтобы получить date и time при необходимости. Это экономит вам один столбец памяти и накладные расходы на создание метки времени.

Ответ №1:

 SELECT    ip_visit_1.ipv1_firstname,   ip_visit_1.ipv1_lastname,   ip_visit_1.ipv1_num,   ns_medication.mlx_date,   ns_medication.mlx_time,   ns_medication.mlx_item FROM  ns_medication  INNER JOIN  ip_visit_1  ON   ns_medication.mlx_acctnum = ip_visit_1.ipv1_num  WHERE  WHERE ns_medication.mlx_time gt;= CURRENT_TIME - INTERVAL '10' MINUTE AND ns_medication.mlx_date = CURRENT_DATE