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年最好的方式。先生,你是一个和蔼可亲的人:)我真的花了一些时间来了解你的宾宁想法。我现在拿到了,我想我已经看到了一切;)。谢谢你给我这个充满挑战的时刻。