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上,不允许日期间隔.
您可以将行号与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)
| 归档时间: |
|
| 查看次数: |
694 次 |
| 最近记录: |