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