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)

しかし、日付の「ビン」をグループ化できないため、実際には効果がありませんでした。日付のギャップがないように、後続の各日付をビンにグループ化したいと思います。

4

1 に答える 1

6

行番号と datediff を固定日付と比較することでこれを行うことができます。これらの差が変わる場合は、少なくとも 1 日のギャップが必要です。したがって、次のようなものです。

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 に答える