postgresql - 选择过去一小时的数据
问题描述
我有一个简单的数据库
id name value date time
1 box 34 2020-06-08 14:45:00
2 box 35 2020-06-08 15:00:00
3 box 4 2020-06-08 15:15:00
4 box 44 2020-06-08 15:30:00
5 box 42 2020-06-08 15:45:00
6 box 41 2020-06-08 16:00:00
7 box 0 2020-06-08 16:15:00
8 box 0 2020-06-08 16:30:00
9 box 0 2020-06-08 16:45:00
...
我正在尝试从 Postgresql 数据库中检索过去 1 小时的最新数据。目标是每小时运行一次此查询,以获取过去一小时的数据,以便在另一个软件中进行进一步处理。
数据库中的记录已经包含当天的所有时间戳(间隔 15 分钟)。
因此,从示例中,假设我的当地时间是 16:00:00,我将希望从我的当地时间获取过去 1 小时的数据。
我尝试了以下方法:
SELECT id, name, value, date, time
FROM boxbox
WHERE time >= (NOW() - INTERVAL '1 hour')
ORDER BY time desc
但是我收到了这个 SQL 错误
SQL Error [42883]: ERROR: operator does not exist: time without time zone >=
timestamp with time zone
表数据类型如下:
id - int4
name - varchar
value - int
date - date
time - time
谢谢你。
解决方案
好吧,now()
返回一个timestamp with time zone
,而不是一个time
值。而且您无法将time
值与timestamp with time zone
值进行比较。
您需要使用localtime
:
SELECT id, name, value, "date", "time"
FROM boxbox
WHERE "time" >= localtime - INTERVAL '1 hour'
ORDER BY "time" desc
但是,如果时间超过午夜,上述操作将无法正常工作。如果您还需要注意这一点,则需要将您的date
和time
列合并为一timestamp
列:
SELECT id, name, value, "date", "time"
FROM boxbox
WHERE "date" + "time" >= now () - INTERVAL '1 hour'
ORDER BY "time" desc
推荐阅读
- python - Django 使用模型表单更新模型实例
- c - cs50 pset4 过滤器边缘检测
- r - 有没有办法使用平均值(SE)而不是 R 中的计数来实现平面表?
- django - 未找到没有参数的“create_order”反向。尝试了 1 种模式:['create_order/(?P
[^/]+)/$'] - salesforce - 更新日期字段时出现内部 Salesforce.com 错误?
- django - 覆盖默认管理站点 - 找不到 myproject
- javascript - 使用 Redux 创建 put api 请求
- sql - SQL 开发人员中的日期转换返回错误
- sql - 如何对两个表sql的数据求和
- netsuite - Netsuite - OneWorld 税收和 Nexus