#postgresql
#postgresql
Вопрос:
У меня есть две таблицы: today’s_table и yeterday’s_table. Мне нужно сравнить данные за интервал в 15 минут в одно и то же время за сегодня и вчера.
Например, для приведенных ниже данных давайте мне нужно проверить с 00:00:00 и 00:15:00 на 20201202 и 20201202. Таким образом, разница должна быть равна ‘3’, поскольку в таблице yesterday__table 8 записей, а в таблице today__table 5 записей.
сегодняшняя таблица:
Вчерашняя таблица:
Я попробовал что-то вроде; (рассмотрим сейчас () 00:15:00)
select count(*) from yeterday's_table where time between now() - interval "24 hours" and now() - interval "23 hours 45 mins"
minus
select count(*) from today's_table where time = now() - interval "15 minutes";
есть ли другой способ сделать это?
Ответ №1:
Вы можете легко сделать это с помощью подзапросов:
SELECT b.c - a.c
FROM (select count(*) as c from yeterdays_table where time between now() - interval '24 hours' and now() - interval '23 hours 45 mins') a,
(select count(*) as c from todays_table where time = now() - interval '15 minutes') b;
Имейте в виду, что вам нужно заключать интервалы в одинарные кавычки, а имена ваших таблиц не могут содержать кавычек.
Комментарии:
1. Спасибо @richyen, могу ли я расширить этот запрос на две базы данных??
2. нет, вы не можете. Это ограничение в Postgres. Есть способы обойти это, а именно с помощью внешних оболочек данных (FDW). См. postgresql.org/docs/current/postgres-fdw.html