将后续日期分组到箱子中

tux*_*nia 2 sql sql-server group-by lead sql-server-2012

假设我有下表:

date         version  
2015-02-01   v1
2015-02-02   v1
2015-02-03   v1
2015-02-04   v1
2015-02-02   v2
2015-02-03   v2
2015-02-08   v1
2015-02-09   v1
Run Code Online (Sandbox Code Playgroud)

我的查询应该以这样的方式对日期进行分组:

datefrom      dateto      version
2015-02-01    2015-02-04  v1
2015-02-08    2015-02-09  v1
2015-02-02    2015-02-03  v2
Run Code Online (Sandbox Code Playgroud)

我尝试了一些东西

LEAD(date) OVER(PARTITION BY version ORDER BY date)
Run Code Online (Sandbox Code Playgroud)

但它并没有真正得到回报,因为我无法对日期的"箱子"进行分组.我想将每个后续日期分组到bin上,不允许日期间隔.

Jam*_*s Z 5

您可以将行号与datediff比较到固定日期,如果这些变化的差异,则必须至少有一天的差距.所以,像这样:

select
  version,
  min (date) as datefrom,
  max (date) as dateto
from
  (
    select
      version,
      date,
      datediff(day, '20100101', date) 
      - row_number() over (partition by version order by date) as bin
    from
      version
  ) T
group by
  version,
  bin
order by
  version,
  datefrom
Run Code Online (Sandbox Code Playgroud)