【问题标题】:Group Date ranges with separate groups if other date in between如果中间有其他日期,则使用单独的组分组日期范围
【发布时间】:2020-10-21 08:30:45
【问题描述】:

我有一个这样的表:

Specification    Date 
ADS              2020-09-04 00:00:00.000
ADS              2020-09-05 00:00:00.000
ADS              2020-09-06 00:00:00.000
AZR              2020-09-07 00:00:00.000
AZR              2020-09-08 00:00:00.000
ADS              2020-09-09 00:00:00.000
ADS              2020-09-10 00:00:00.000

我想选择一个开始日期和一个结束日期,并按规范对它们进行分组。 所以我的输出应该是这样的:

Specification    Start                     End
ADS              2020-09-04 00:00:00.000   2020-09-06 00:00:00.000
AZR              2020-09-07 00:00:00.000   2020-09-08 00:00:00.000
ADS              2020-09-09 00:00:00.000   2020-09-10 00:00:00.000

我试过了:

select
Specification, MIN(Date) as Start, MAX(Date) as End
from CUSTOMERS
group by Specification 

但这并没有给出我想要的结果。有人有想法吗?

【问题讨论】:

  • 对这些数据运行查询的结果是什么?

标签: sql sql-server gaps-and-islands


【解决方案1】:

您可以尝试以下方法 - 这是一个差距和孤岛问题

select col1, min(dateval) as start, max(dateval) as end
from
(
select *,row_number() over(order by dateval)-
row_number() over(partition by col1 order by dateval) as grp
from t
)A group by col1, grp

【讨论】:

  • 效果很好!并感谢您指出这是一个差距和孤岛问题。
猜你喜欢
  • 2021-05-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-01-18
  • 1970-01-01
  • 1970-01-01
  • 2013-10-03
  • 1970-01-01
相关资源
最近更新 更多