/ / PostgreSQL запит на поточну хвилину - sql, postgresql, jdbc

Запит PostgreSQL для поточної хвилини - sql, postgresql, jdbc

Мій веб-додаток повинен отримати результати всіх елементів, які мають значення часу для цієї хвилини. У таблиці є атрибути часу

id, message, time, ...,

де час має тип тимчасової мітки з часовим поясом. Мені потрібно отримати список всіх записів, де час є поточною хвилиною. Порівняння всього значення не збігається, оскільки мітка часу має мікросекундне дозвіл.

Наразі я використовую наступний запит, щоб повернути цей список, і він працює, але я думаю, що це має бути більш ефективним способом.

SELECT * FROM notification WHERE
date_part("year", time) = date_part("year", current_date) AND
date_part("month", time) = date_part("month", current_date) AND
date_part("day", time) = date_part("day", current_date) AND
date_part("hour", time) = date_part("hour", current_time) AND
date_part("minute", time) = date_part("minute", current_time);

Я також хотів би знати, як отримати результати для цієї і попередньої хвилини або останніх "n" хвилин. База даних PostgreSQL 8.4.3

Дякую

Відповіді:

3 для відповіді № 1

Я спробую щось на зразок цього:

WHERE
time >= date_trunc("minute", now()) AND
time < date_trunc("minute", now()) + INTERVAL "1 minute";

Це визначатиме межі та шукати час у межах цього діапазону, що означає, що він може використовувати індекс, який ви маєте (або має мати) на time колонка


2 для відповіді № 2

Як щодо простого порівняння скорочених часових позначок?

SELECT *
FROM notification n
WHERE date_trunc("minute", n.time) = date_trunc("minute", current_timestamp);

Я сумніваюся, що оптимізатор досить розумний, щоб використовувати індекс на своєму time за допомогою цього підходу. Якщо у вас є такий індекс, то, напевно, слід скористатися пропозицією Lukáš Lalinský, якщо ви хочете кращої продуктивності.