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

问题描述 投票:-1回答:2

与Postgres 9.2间隔30天。

我有这样一张桌子:

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
sql postgresql intervals date-arithmetic
2个回答
1
投票

在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
投票

这对我有用......

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

NOW()函数将返回当前日期。

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

@ interval [ fields ] [ (p) ]

间隔具有可选的精度值p。 p的范围为0到6,以秒为单位。 @符号是可选的。

SELECT * FROM TABLE 
WHERE CREATED_AT >= (NOW() - interval '30 day')
AND CREATED_AT <= (NOW() - interval '1 day');
© www.soinside.com 2019 - 2024. All rights reserved.