Postgresql 选择过去一小时的数据

Postgresql 选择过去一小时的数据,postgresql,select,time,Postgresql,Select,Time,我有一个简单的数据库 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

我有一个简单的数据库

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()
返回带时区的
时间戳,而不是
时间值。您不能将
时间
值与
时间戳与时区
值进行比较

您需要使用:

然而,如果时间过了午夜,上述方法将无法正常工作。如果您还需要注意这一点,则需要将
日期
时间
列组合为一个
时间戳
列:

SELECT id, name, value, "date", "time"
FROM boxbox 
WHERE "date" + "time" >= now () - INTERVAL '1 hour'
ORDER BY "time" desc

为什么要使用两列而不是一列
timestamp
column?您尝试过这个-
WHERE-itime>=(NOW()::time-INTERVAL'1hour')
?@VivekS。我刚刚更新了我的问题。谢谢。我刚刚尝试了你的查询,它没有正确过滤。例如,我的本地时间现在是下午3点,当我运行查询时,它会过滤并提供从下午3点到午夜的数据。我已经使用您的第二块代码在我的数据集中进行了测试。我将修改我的问题。请稍等,我现在就知道如何让它对我的案子起作用了。将此标记为答案,谢谢。
SELECT id, name, value, "date", "time"
FROM boxbox 
WHERE "date" + "time" >= now () - INTERVAL '1 hour'
ORDER BY "time" desc