Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/79.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
oraclesql中的if子句_Sql_Oracle11g - Fatal编程技术网

oraclesql中的if子句

oraclesql中的if子句,sql,oracle11g,Sql,Oracle11g,我需要有关Oracle SQL查询的帮助。以下是一个表格示例: time var '2015.07.08 01:00:01' 0.1 '2015.07.08 01:00:02' 0.15 '2015.07.08 01:00:03' 0.22 '2015.07.08 01:00:04' 0.13 '2015.07.08 01:00:05' 0 '2015.07.08 01:00:06' 0.1 '2015.0

我需要有关Oracle SQL查询的帮助。以下是一个表格示例:

time                      var
'2015.07.08 01:00:01'     0.1
'2015.07.08 01:00:02'     0.15
'2015.07.08 01:00:03'     0.22
'2015.07.08 01:00:04'     0.13
'2015.07.08 01:00:05'     0
'2015.07.08 01:00:06'     0.1
'2015.07.08 01:00:07'     0.02
'2015.07.08 01:00:08'     0
'2015.07.08 01:00:20'     0.1
现在我需要对象x+1和x的所有时间差,如果var等于0。对于本例,我希望以秒为单位查看此输出:

1   # '2015.07.08 01:00:06' - '2015.07.08 01:00:05'
12  # '2015.07.08 01:00:20' - '2015.07.08 01:00:08'
如果var==0计算时间(行+1)-time(行),那么下面的语句如何。
感谢您的帮助。

使用LAG查看以前的记录:

select (time - time_before) * 24 * 60 * 60
from
(
  select
    time, 
    var, 
    lag(var) over (order by time) as var_before,
    lag(time) over (order by time) as time_before
  from mytable
)
where var_before = 0
order by time;
哎呀,那太复杂了。使用LEAD查看下一条记录,而不是:-)


不过,第一个查询要精确一点。如果最后一条记录包含0,则查询1将不考虑这一点,因为没有后续记录。但是,第二个查询将返回NULL,因为当没有后续记录时,提前期(time)将导致NULL。由您决定这是否困扰您。

按什么逻辑排序?按
时间
或按
变量
排序?
select (lead(time) over (order by time) - time) * 24 * 60 * 60
from mytable
where var = 0
order by time;