Как выбрать строки по интервалу года с postgres sql? - PullRequest
1 голос
/ 21 января 2020

У меня есть таблица с некоторыми данными пациентов из системы здравоохранения, опубликованной c. У меня есть две даты в этой таблице, дата уведомления о болезни и дата рождения пациента, например:

notification_date | birth_date 
------------------+-----------------
 2013-02-19       | 2013-02-17
 2015-01-28       | 1984-01-22
 2015-02-08       | 1989-10-04
 2015-01-09       | 1984-05-25
 2016-01-28       | 1988-04-26
 2016-01-06       | 1986-05-20

Как вы можете видеть, получая интервал года из этих двух столбцов, Я могу узнать, сколько лет было пациенту на момент уведомления о болезни. Мне нужно спросить, сколько людей имели возраст <4 лет, когда болезнь была зарегистрирована. </p>

Что-то в этом роде:

SELECT COUNT(id) 
FROM notifications 
WHERE age(notification_date, birth_date) < 4 years;

Возможно ли в этом запросе указать указанный интервал c?

Ответы [ 3 ]

1 голос
/ 21 января 2020

Я бы использовал прямое сравнение дат:

select count(*)
from notifications n
where notification_date < birthdate  + interval '4 year';

Использование такой функции, как age(), кажется излишне громоздким.

0 голосов
/ 21 января 2020

Postgres понимает интервальную арифметику, поэтому рассмотрим:

SELECT count(*) 
FROM notifications 
WHERE age(notification_date, birth_date) < interval '4 years';

Демонстрация по БД Fiddle

Для ваших примеров данных есть только одна запись, удовлетворяющая условию, поэтому запрос выдает 1.

0 голосов
/ 21 января 2020

Попробуйте DATE_PART с Count(*)

SELECT count(*) FROM notifications WHERE DATE_PART('year',age(notification_date, birth_date)) < 4;

Эта функция даст вам полных лет между двумя датами.

Подробнее здесь, если вам нужно: https://www.postgresqltutorial.com/postgresql-date_part/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...