Postgresql — запрос для получения разницы в количестве данных

#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