从最近10分钟提取数据

时间:2018-07-09 20:01:29

标签: sql oracle oracle11g

我创建了一条SQL语句,该语句从数据库中提取我们需要的数据以自动生成警报。 SQL如下:

select t.ps_ticket_id,
   l.loc_desc,
   n.descrip,
   a.itemno,
   p.print_last_date
from fgmulti f, 
   locations l,
   V_ps_tickets t,
   non_conform n,
   arinvt a,
   ps_ticket p
where f.loc_id = l.id and
   f.arinvt_id = t.arinvt_id and 
   n.id = f.non_conform_id and 
   f.arinvt_id = a.id and
   p.id = t.ps_ticket_id

我希望编写SQL,以查看我们从p.print_last_date提取的时间戳。我希望它仅提取最近10分钟内填充的数据。这可能吗?

4 个答案:

答案 0 :(得分:1)

select sysdate, sysdate - interval '10' minute as minus_10_mins  from dual;


"SYSDATE","MINUS_10_MINS"
09-JUL-2018 20:09:41,09-JUL-2018 19:59:41

答案 1 :(得分:0)

... and p.timestamp_column > sysdate - 10 / (24 * 60)

您将从SYSDATE中减去10分钟(精确到秒)。 24 * 60代表“一天24小时”和“每小时60分钟”。您需要这样做,因为-当减去两个DATE数据类型值时,结果是它们之间的天。

或者,您可以减去间隔,例如

... and p.timestamp_column > sysdate - interval '10' minute

例如:

SQL> select sysdate,
  2         sysdate - 10 / (24 * 60) ten_minutes_ago_1,
  3         sysdate - interval '10' minute ten_minutes_ago_2
  4  from dual;

SYSDATE             TEN_MINUTES_AGO_1   TEN_MINUTES_AGO_2
------------------- ------------------- -------------------
09.07.2018 22:11:04 09.07.2018 22:01:04 09.07.2018 22:01:04

SQL>

答案 2 :(得分:0)

仅供参考,您正在使用的代码虽然有效,但仍不符合ANSI标准,该标准现已使用了20年。这将连接与WHERE子句分开:

SELECT t.ps_ticket_id, l.loc_desc, n.descrip, a.itemno, p.print_last_date
  FROM fgmulti f
 INNER JOIN locations l
    ON f.loc_id = l.id
 INNER JOIN v_ps_tickets t
    ON f.arinvt_id = t.arinvt_id
 INNER JOIN non_conform n
    ON n.id = f.non_conform_id 
 INNER JOIN arinvt a
    ON f.arinvt_id = a.id
 INNER JOIN ps_ticket p
    ON p.id = t.ps_ticket_id
 WHERE p.print_last_date >= SYSDATE - 1/144;

(由于一天中有1,440分钟,所以1/144 = 10分钟。您也可以使用间隔,例如- INTERVAL '10' MINUTE,但我认为这里没有很好的理由符合ANSI标准使用非标准功能时-无论如何SYSDATE。)

希望这会有所帮助。

答案 3 :(得分:-2)

这在TSQL中有效,但是我认为您需要查找DateAdd函数的Oracle版本:

select t.ps_ticket_id,
   l.loc_desc,
   n.descrip,
   a.itemno,
   p.print_last_date
from fgmulti f, 
   locations l,
   V_ps_tickets t,
   non_conform n,
   arinvt a,
   ps_ticket p
where f.loc_id = l.id and
   f.arinvt_id = t.arinvt_id and 
   n.id = f.non_conform_id and 
   f.arinvt_id = a.id and
   p.id = t.ps_ticket_id AND
   p.print_last_date > DATEADD(MINUTE, -10, GETDATE());