获取最近30天内(今天除外)的行

时间:2019-04-18 13:42:33

标签: sql postgresql intervals date-arithmetic

间隔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 个答案:

答案 0 :(得分: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)上建立索引。

答案 1 :(得分: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');