Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/amazon-web-services/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 从给定表格中获取燃油的加注时间_Sql_Oracle_Oracle12c - Fatal编程技术网

Sql 从给定表格中获取燃油的加注时间

Sql 从给定表格中获取燃油的加注时间,sql,oracle,oracle12c,Sql,Oracle,Oracle12c,我有一个表格,其中给出了燃油加注的详细信息,我们有id列,然后是fuel列,它告诉我们有多少燃油,然后是TIME列,它告诉我们在特定时间我们有多少燃油 create table fuel_details (id number, fuel_in_ltr number, time timestamp); insert into fuel_details values (1, 10, '24-jan-2017 12:00'); insert into fuel_details values

我有一个表格,其中给出了燃油加注的详细信息,我们有id列,然后是fuel列,它告诉我们有多少燃油,然后是TIME列,它告诉我们在特定时间我们有多少燃油

create table fuel_details (id number, fuel_in_ltr number, time timestamp);  

insert into fuel_details values (1, 10, '24-jan-2017 12:00');  
insert into fuel_details values (2, 9, '24-jan-2017 01:00');  
insert into fuel_details values (3, 8, '24-jan-2017 02:00');  
insert into fuel_details values (4, 7, '24-jan-2017 03:00');  
insert into fuel_details values (5, 12, '24-jan-2017 04:00');  
insert into fuel_details values (6, 11, '24-jan-2017 05:00');  
insert into fuel_details values (7, 10, '24-jan-2017 06:00');  
insert into fuel_details values (8, 13, '24-jan-2017 07:00');  
insert into fuel_details values (9, 12, '24-jan-2017 08:00');  
insert into fuel_details values (10, 11, '24-jan-2017 09:00');  
insert into fuel_details values (11, 10, '24-jan-2017 10:00');  
insert into fuel_details values (12, 13, '24-jan-2017 11:00');  
在上面的插入声明中,我们可以看到,在下午12点,我们有10升燃油,然后在下午1点,我们有9升燃油,下午2点,我们有8升燃油,依此类推,但在下午4点,我们有12升燃油,这意味着我们在下午4点重新加注燃油,因此从上表中,我们需要获得每次加注的时间

我的数据库是- Oracle Database 12c Enterprise Edition 12.1.0.2.0版-64位生产版使用滞后分析功能:

SELECT id, time
FROM   (
  SELECT f.*,
         LAG( fuel_in_ltr ) OVER ( ORDER BY time, id ) AS prev_fuel_in_ltr
  FROM   fuel_details f
)
WHERE  fuel_in_ltr > prev_fuel_in_ltr;

不要使用字符串插入时间戳或日期并依赖隐式转换-相反,您应该使用指定格式掩码的时间戳或使用ANSI时间戳文字-即时间戳“2017-01-24 00:00:00”。我将在将来记住。太好了!谢谢,我需要更多的研究:@mradul问题,如果在我们加满的时间戳之间说5升,但使用10升,会发生什么?那么,是否会错过这种加满呢?@BobC OP的问题显示,每小时1升的使用率是稳定的。如果我们知道这一点,那么查询可以更改为WHERE fuel_in_ltr>prev_fuel_in_ltr-:hourly_usage。但是,如果必须关闭装置一小时以进行加油,或者如果每小时使用的燃油量是动态的,因此必须应用一定量的领域知识,则这是没有意义的。