Sql 将后续日期分组到BIN中

Sql 将后续日期分组到BIN中,sql,sql-server,sql-server-2012,group-by,lead,Sql,Sql Server,Sql Server 2012,Group By,Lead,假设我有下表: 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 我的查询将按以下方式对日期进行分组: datefrom dateto version 2015-02-01 2015-02-04 v1 2015-02-

假设我有下表:

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
我的查询将按以下方式对日期进行分组:

datefrom      dateto      version
2015-02-01    2015-02-04  v1
2015-02-08    2015-02-09  v1
2015-02-02    2015-02-03  v2
我试了些东西

LEAD(date) OVER(PARTITION BY version ORDER BY date)
但这并没有真正得到回报,因为我无法将日期“分类”。
我想将每个后续日期分组到on bin中,不允许有日期间隔。

您可以通过将行数与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

我确实使用sql server 2012,您能解释一下如何使用滞后/超前来简化此查询吗?对不起,滞后/超前当然有助于找到差距,而不是孤岛本身。我认为这也是2012年最好的方式。先生,你是一个和蔼可亲的人:)我真的花了一些时间来了解你的宾宁想法。我现在拿到了,我想我已经看到了一切;)。谢谢你给我这个充满挑战的时刻。