首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >计算数据集的持续时间

计算数据集的持续时间
EN

Stack Overflow用户
提问于 2015-10-30 05:05:15
回答 1查看 78关注 0票数 2

我在SQL中有一组数据,如下所示:

代码语言:javascript
复制
╔═══════════╦═══════╗
║ TimeStamp ║ State ║
╠═══════════╬═══════╣
║  7:10 AM  ║   A   ║
║  7:11 AM  ║   A   ║
║  7:12 AM  ║   A   ║
║  7:13 AM  ║   B   ║
║  7:14 AM  ║   B   ║
║  7:15 AM  ║   A   ║
║  7:16 AM  ║   A   ║
║  7:17 AM  ║   C   ║
║  7:18 AM  ║   C   ║
╚═══════════╩═══════╝

我试图计算每个状态的持续时间。但是,我想分离每个状态序列,并分别计算它们之间的差异,将重复的状态分离开来。因此,我希望上面的数据返回如下所示:

代码语言:javascript
复制
╔═══════╦════════════════════╗
║ State ║ Duration (minutes) ║
╠═══════╬════════════════════╣
║   A   ║         2          ║
║   B   ║         1          ║
║   A   ║         1          ║
║   C   ║         1          ║
╚═══════╩════════════════════╝

有人能帮忙吗?如何编写返回此数据的SQL查询?

谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-10-30 06:17:18

好吧,我假设需要MS SQL Server。

为了达到预期结果(C的持续时间为1):

代码语言:javascript
复制
select    
    state, MIN(TimeStamp) StartsAt, EndsAt, datediff(minute,MIN(TimeStamp),EndsAt) DurationMinutes
from (
        select
                t1.state, t1.TimeStamp
                , ISNULL(ca.EndsAt, (select max(timestamp) from table1) ) EndsAt
        from table1 t1
        outer apply (
                  select top (1) t2.timestamp as EndsAt
                  from table1 t2
                  where t1.state <> t2.state and t1.TimeStamp < t2.TimeStamp
                  order by t2.TimeStamp
              ) ca
    ) as derived
group by     
    state, EndsAt

对于数据样本,可以说C的持续时间是未知的,因为状态还没有改变。在这种情况下,它会更简单一些:

代码语言:javascript
复制
select    
    state, MIN(TimeStamp) StartsAt, EndsAt, datediff(minute,MIN(TimeStamp),EndsAt) DurationMinutes
from (
        select
                t1.state, t1.TimeStamp ,ca.EndsAt
        from table1 t1
        outer apply (
                  select top (1) t2.timestamp as EndsAt
                  from table1 t2
                  where t1.state <> t2.state and t1.TimeStamp < t2.TimeStamp
                  order by t2.TimeStamp
              ) ca
    ) as derived
group by     
    state, EndsAt

http://sqlfiddle.com/#!6/f0dd7e/9

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

https://stackoverflow.com/questions/33429008

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档