2

假设我有下表:

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)

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

4

1 回答 1

6

您可以通过将带有 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
于 2015-03-01T17:05:03.247 回答