获取最近 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');
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');