2017-04-12 36 views
0

例如,我有表如下数据:Oracle查询检查记录存在与否 - 每小时

FORMID | QUANTITY | DATEADDED 
1  | 150  | 4/12/2017 2:33:27 PM 
2  | 100  | 4/12/2017 3:15:10 PM 

我希望查询检查数据每小时存在或不基于当前时间。

Current time: 18:00 

所以当查询检查数据,应该没有数据,因为我们看到的最后一个数据是在下午3时15分10秒和当前时间是18:00(超过2小时前)。

我不知道该怎么做呢,

SELECT * FROM TBQUANTITY WHERE... 
+0

所以你需要18:00:00和18:59:59之间的数据? – Nitish

+0

如果上次日期是'4/12/2017 3:15:10 PM',当前时间是'4/12/2017 4:15:10 PM',那么这行应该返回吗? –

回答

1

这将让所有行DATEADDED列现在(使用服务器时间),一小时前之间。

SELECT * 
FROM TBQUANTITY 
WHERE dateadded BETWEEN SYSDATE - INTERVAL '1' HOUR AND SYSDATE 
0

对于一个简单的即席查询,看看是否有一些记录使用SYSDATE如其他答案建议。

如果您的目标是获取所有记录并仅处理每条记录一次,则应该更加小心。

可以每小时安排查询从塔最后一个小时中选择数据如

select * from T where DATEADDED > trunc(sysdate,'HH') -1/24 
    and DATEADDED <= trunc(sysdate,'HH') 

注意这个查询选择最后一个小时的时间到的数据(上HHTRUNC) 例如从12-04-2017 17:00:00到12-04-2017 18:00:00,并且您使用半开区间而不是BETWEEN,该选项将选择记录,并将整个小时的时间戳记记录两次。