首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >PLSQL-在满足条件时测量持续时间

PLSQL-在满足条件时测量持续时间
EN

Stack Overflow用户
提问于 2011-03-22 18:41:02
回答 2查看 155关注 0票数 1

假设有如下表格:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
time    name availability
10:00   A   100
10:05   A   0
10:10   A   0
10:15   A   0
10:20   A   0
10:25   A   0
10:30   A   100
10:35   A   0
10:40   A   0
10:45   A   100
10:50   A   100
10:55   A   0
11:00   A   100
11:05    A   0

我想计算可用性等于零的每个事件的持续时间,这不仅意味着"0“的计数,还意味着在下一个值再次变为100之前,第一个零和最后一个零之间的持续时间是多少。

例如,在我的表中,我有3对事件(up=100、down=0、up),第一对事件持续25分钟(10:05-10:25),第二对事件持续10分钟,第三对事件持续5分钟。最后一个零不是up-down-up事件的一部分!

EN

回答 2

Stack Overflow用户

发布于 2011-03-23 09:18:54

这不会用原始的美来回答,至少据我所知不会。

不过,要做到这一点并不难。不过,您必须与分析函数成为朋友。在本例中: Lag和Lead。

如果这就是你想要得到的(我敢肯定你可以自己计算差值,有趣的部分是得到范围),那么看看下面的查询:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
10:00   A   100     
10:05   A   0   10:05   10:25
10:10   A   0   10:05   10:25
10:15   A   0   10:05   10:25
10:20   A   0   10:05   10:25
10:25   A   0   10:05   10:25
10:30   A   100     
10:35   A   0   10:35   10:40
10:40   A   0   10:35   10:40
10:45   A   100     
10:50   A   100     
10:55   A   0   10:55   10:55
11:00   A   100     
11:05   A   0   11:05   11:05

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
with startTime as
(
  SELECT time
        ,Name
        ,case
           when t.availability = 0 and
           /* see the default value passed to "lag", 
              if nothing gets returned (first row), we return 2 which is > 0 */
                 lag(availability, 1,2) OVER(partition BY Name ORDER BY time) > 0 then 
            time
         end start_time
  FROM   SampleTable t
)
,stopTime as
(
  SELECT time
        ,name
        ,case
           when t.availability = 0 and
           /* see the default value passed to "lead" 
              if nothing gets returned (last row), we return 2 which is > 0*/
                (lead(availability, 1, 2) OVER(partition BY Name ORDER BY time) > 0) then
            time
         end stop_time
  FROM   SampleTable t
)
SELECT t.time
      ,t.Name
      ,t.availability
      ,case
         when t.availability = 0 then
          (SELECT Max(start_time)
           FROM   startTime
           WHERE  start_time is not null
           and    time <= t.time)
       end as start_time
      ,case
         when t.availability = 0 then
          (SELECT Min(stop_time)
           FROM   stopTime
           WHERE  stop_time is not null
           and    time >= t.time)
       end as stop_time
FROM   SampleTable t
ORDER  BY t.time
票数 1
EN

Stack Overflow用户

发布于 2011-03-23 09:17:42

LAG函数可以帮助您:Oracle LAG function

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5396209

复制
相关文章
Mybatis中判断集合的 size 不为空
Mybatis中判断集合的size, 可以用下面的方法来做。 <if test="null != staffCodeList and staffCodeList.size > 0"> and gui.USER_CODE not in <foreach collection="staffCodeList" item="staffCode" open="(" separator="," close=")"> #{staffCode} </foreach> </if>
一个会写诗的程序员
2020/04/30
4.9K0
go中interface空指针不为nil判断方法
当把一个空指针对象赋值给一个interface后,再判断!= nil就不再成立了 代码如下
雪山飞猪
2019/08/29
2.4K0
Nullable Reference Types 可空引用类型
但如果想避免NullReferenceException的发生,确实需要做很多麻烦的工作。
solenovex
2019/10/15
8190
Nullable Reference Types 可空引用类型
如何检查 MySQL 中的列是否为空或 Null?
在MySQL数据库中,我们经常需要检查某个列是否为空或Null。空值表示该列没有被赋值,而Null表示该列的值是未知的或不存在的。在本文中,我们将讨论如何在MySQL中检查列是否为空或Null,并探讨不同的方法和案例。
网络技术联盟站
2023/07/14
1.4K0
如何检查 MySQL 中的列是否为空或 Null?
如何检查 MySQL 中的列是否为空或 Null?
在MySQL数据库中,我们经常需要检查某个列是否为空或Null。空值表示该列没有被赋值,而Null表示该列的值是未知的或不存在的。在本文中,我们将讨论如何在MySQL中检查列是否为空或Null,并探讨不同的方法和案例。
网络技术联盟站
2023/08/03
3.3K0
如何检查 MySQL 中的列是否为空或 Null?
bootstrap 表单验证 不为空验证
<!doctype html> <html> <head> <meta charset="utf-8"> <title>联想控股</title> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <link href="css/bootstrap.css" rel="stylesheet" type="text/css"> <link href="css/bootstrapValidator.min.css" rel="stylesheet" type="text/css"> <script src="http://code.jquery.com/jquery.js"></script> <script src="js/bootstrap.min.js"></script> <script src="js/bootstrapValidator.min.js"></script> </head> <body>  <form role="form"> <div class="form-group"> <label>Username</label> <input type="text" class="form-control" name="username" /> </div> <div class="form-group"> <label>Email address</label> <input type="text" class="form-control" name="email" /> </div> <div class="form-group"> <button type="submit" name="submit" class="btn btn-primary">Submit</button> </div> </form> <script>
用户5760343
2019/07/07
8.7K0
在 Java 中如何优雅地判空
  作为搬砖党的一族们,我们对判空一定再熟悉不过了,不要跟我说你很少进行判空,除非你喜欢NullPointerException。
芋道源码
2019/11/21
2.4K0
在Java中如何优雅地判空
作为搬砖党的一族们,我们对判空一定再熟悉不过了,不要跟我说你很少进行判空,除非你喜欢 NullPointerException。
JAVA葵花宝典
2019/11/15
1.4K0
怎么判断map不为空「建议收藏」
这里是用isEmpty()方法来做判断,其实和map.size()也没差,可以看下isEmpty()方法的源码:
全栈程序员站长
2022/09/07
2.4K0
c#中的可空类型和空合并操作符(Nullable Types 和 Null Coalescing Operator)
在本文中,我们将讨论可空类型和空合并操作符以及如何在基于c#的代码中使用它们。 这是c#编程中的一个基本概念。在这里,我将解释可空类型,c#中的空合并操作符,以及如何在LINQ中使用该操作符。 c#中
程序你好
2018/07/20
4.1K0
在Oracle中,如何获取ASH报告?
(2)使用OEM,可以在性能页,单击“运行ASH报告”按钮生成ASH报告,由于OEM生产用的相对比较少,这里就不讨论了。
AiDBA宝典
2023/08/10
1.3K0
在Oracle中,如何获取ASH报告?
在DragonOS中,使蜂鸣器发声
很简单,代码如下: void beep(uint64_t times) { io_out8(0x43, 182&0xff); io_out8(0x42, 2280&0xff); io_out8(0x42, (2280>>8)&0xff); uint32_t x = io_in8(0x61)&0xff; x |= 3; io_out8(0x61, x&0xff); times *= 10000; for(uint64_t i=0;i<times
灯珑LoGin
2022/10/31
4110
Java判断不为空的工具类总结
1、Java判断是否为空的工具类,可以直接使用。包含,String字符串,数组,集合等等。
别先生
2018/08/09
5K0
【DB笔试面试692】在Oracle中,V$SYSSTAT中的CLASS列分别代表什么?
V$SYSSTAT列代表统计类别,其值为1代表事例活动;值为2代表Redo buffer活动;值为4代表锁;值为8代表数据缓冲活动;值为16代表OS活动;值为32代表并行活动;值为64代表表访问;值为128代表调试信息。
AiDBA宝典
2019/11/25
1.5K0
验证多个class相同的input框不为空
要求,页面有多个class相同的input输入框,在提交数据的时候,进行验证,验证input框不能为空,如果哪个为空,则弹出提示:
王小婷
2020/05/26
1.8K0
验证多个class相同的input框不为空
如何使程序在Linux后台运行
这样一来,test程序就在后台运行了。但是,这样处理还不够,因为这样做虽然程序是在后台运行了,但log依然不停的输出到当前终端。因此,要让终端彻底的清静,还应将log重定向到指定的文件:
阿凡亮
2020/04/14
8.8K0
xml 里面判断int类型,String类型不为空
目录 1 int类型 2 String类型 1 int类型 <if test="status != null"> and c.status = #{status} </if> 则0和1都可以 所以数字判断的时候,应该是只要判断非空就可以。 2 String类型 <if test="status != null and status != ''"> and c.status = #{status} </if>
一写代码就开心
2022/08/14
1.9K0
在Oracle中,如何定时删除归档日志文件?
1、在Oracle用户下,创建归档日志删除文件del_OCPLHR1_arch.sh
AiDBA宝典
2018/11/29
3.4K0
在Oracle中,如何定时删除归档日志文件?
在Oracle中,如何定时删除归档日志文件?
1、在Oracle用户下,创建归档日志删除文件del_OCPLHR1_arch.sh
AiDBA宝典
2022/11/07
2.1K0
点击加载更多

相似问题

卡片布局动作按钮

12

使用卡片布局,卡片不能互换?

14

如何在卡片列表(角)中翻转一张卡片

11

从卡片阵列中调用一张卡片

21

使用卡片切换按钮动态创建布局

12
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文