Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/9.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
Sql Oracle第一个_值(分区)中断序列_Sql_Oracle_Select - Fatal编程技术网

Sql Oracle第一个_值(分区)中断序列

Sql Oracle第一个_值(分区)中断序列,sql,oracle,select,Sql,Oracle,Select,上述查询提供: select * from grouping; 我想按SEQ_START对这些行进行分组,这样当我运行它时,它应该给出以下结果。排名列应为按顺序开始分组的工作日(或任何其他数字)。请注意,尽管2013年10月10日和2013年10月11日的序列开始时间为0,但仍然不应为2013年10月1日,而应为2013年10月10日,因为在2013年10月8日,序列已中断(序列开始时间为0) 我写了以下查询,返回值与我预期的接近,但它给出的是2013年10月10日和2013年10月11日

上述查询提供:

select * from grouping;

我想按SEQ_START对这些行进行分组,这样当我运行它时,它应该给出以下结果。排名列应为按顺序开始分组的工作日(或任何其他数字)。请注意,尽管2013年10月10日和2013年10月11日的序列开始时间为0,但仍然不应为2013年10月1日,而应为2013年10月10日,因为在2013年10月8日,序列已中断(序列开始时间为0)


我写了以下查询,返回值与我预期的接近,但它给出的是2013年10月10日和2013年10月11日的“0”值,而它们应该是2013年10月10日,因为序列在2013年10月8日被打破,序列开始为1

WORKING_DAYS,DATE_TYPE,SEQ_START,rank
10/1/2013   ,L        ,0        ,10/1/2013
10/2/2013   ,L        ,0        ,10/1/2013
10/3/2013   ,L        ,0        ,10/1/2013
10/4/2013   ,L        ,0        ,10/1/2013
10/8/2013   ,L        ,1        ,10/8/2013
10/10/2013  ,L        ,0        ,10/10/2013
10/11/2013  ,L        ,0        ,10/10/2013

WORKING_DAYS,DATE_TYPE,SEQ_START,rank
10/1/2013   ,L        ,0        ,10/1/2013
10/2/2013   ,L        ,0        ,10/1/2013
10/3/2013   ,L        ,0        ,10/1/2013
10/4/2013   ,L        ,0        ,10/1/2013
10/8/2013   ,L        ,1        ,10/8/2013
10/10/2013  ,L        ,0        ,10/10/2013
10/11/2013  ,L        ,0        ,10/10/2013
select working_days,  
       date_type, 
       seq_start, 
       FIRST_VALUE(working_days)  OVER (PARTITION BY seq_start 
                                        ORDER BY working_days) "rank"
  from grouping 
 where date_type = 'L'
select 
  working_days,  date_type, seq_start, 
  FIRST_VALUE(working_days) OVER (PARTITION BY grp ORDER BY working_days) "rank"
from (
  select 
    working_days, date_type, seq_start,
    sum(front) over(order by working_days) as grp
  from (
    select 
      working_days, date_type, seq_start,
      decode(seq_start, lag(seq_start)over(order by working_days), 0, 1) as front
    from t1
  )
)
where date_type = 'L'
order by 1