获取最近 30 天内的行,不包括今天

Get rows within last 30 days, excluding today

Postgres 9.2 间隔 30 天。

我有一个 table 这样的:

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

在 Postgres 中,您只需从 date 中减去 integer(作为天数):

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

date 在表达式中隐式转换为 timestamp

不包括 "today",即 30 天。如果 table 很大,请考虑 (created_at).

上的索引

这对我有用...

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

NOW() 函数将 return 当前日期。

INTERVAL 数据类型允许您存储和操作一段时间的年、月、日、小时、分钟、秒等。间隔需要 16 字节存储。

@ interval [ fields ] [ (p) ]

Interval 有一个可选的精度值 p。 p 的范围从 0 到 6 和以秒为单位的小数位。 @ 符号是可选的。

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