0

我有桌子

DateTime    V1        V2 
------------------------
1/1/2001    100       200
1/2/2001    null      null
1/3/2001    null      null 
1/4/2001    100       300
1/5/2001    null      null
1/6/2001    null      null

当列值 v1 和 v2 为空时,我想找到像开始行日期为 SDate 和结束行日期为 EDate 的间隔日

SDateTime     EDateTime    Days
1/2/2001      1/3/2011       2
1/5/2001      1/6/2001       2
4

1 回答 1

1

您没有指定 DBMS,所以这是一个 ANSI SQL 解决方案:

select min(datetime) as start_date, 
       max(datetime) as end_date, 
       max(datetime) - min(datetime) as days
from (
  select datetime,
         v1,
         v2, 
         sum(case 
               when v1 is null and v2 is null then null
               else 1
             end) over (order by datetime) as group_flag
  from foo
) t
group by group_flag
order by 1

SQLFiddle 示例:http ://sqlfiddle.com/#!12/12fdb/1

于 2013-08-23T10:53:13.593 回答