oraclesql中的if子句
我需要有关Oracle SQL查询的帮助。以下是一个表格示例: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
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;