Получить строки в течение последних 30 дней, исключая сегодня - PullRequest
0 голосов
/ 18 апреля 2019

30-дневный интервал с Postgres 9.2.

У меня есть такая таблица:

ID NAME CREATED_AT

1 valid 2019-03-07 12:00:00
2 valid 2019-02-05 12:00:00
3 valid 2019-02-04 12:00:00

Я хочу получить все строки, которые соответствуют 30-дневному интервалу до сегодня.

Если сегодня 2019-03-07, я должен получить только:

2 valid 2019-02-05 12:00:00

Если сегодня 2019-04-06, я должен получить:

1 valid 2019-03-07 12:00:00
2 valid 2019-02-05 12:00:00

и так далее ...

Если сегодня 2019-05-06:

1 valid 2019-03-07 12:00:00
2 valid 2019-02-05 12:00:00

Ответы [ 2 ]

1 голос
/ 18 апреля 2019

В Postgres вы можете просто вычесть integer (как количество дней) из date:

SELECT *
FROM   tbl
WHERE  created_at >= current_date - 30
AND    created_at <  current_date;  -- to exclude "today" (and the future)

date приведено к timestamp неявно в выражении.

Без учета "сегодня", что составляет 30 дней.Если таблица большая, рассмотрите индекс на (created_at).

0 голосов
/ 18 апреля 2019

Это сработало для меня ...

select (NOW() - interval '30 day')

СЕЙЧАС () Функция вернет текущую дату.

ИНТЕРВАЛ тип данных позволяетхранить и манипулировать периодом времени в годах, месяцах, днях, часах, минутах, секундах и т. д. Интервал требует 16-байтовой памяти.

@ interval [ fields ] [ (p) ]

Интервал имеет необязательное значение точности p.р имеет диапазон от 0 до 6 и доли цифр в секундах.Знак @ не обязателен.

SELECT * FROM TABLE 
WHERE CREATED_AT >= (NOW() - interval '30 day')
AND CREATED_AT <= (NOW() - interval '1 day');
...