SQL Server 如何在窗口函数SQL中创建时间范围分组

km0tfn4u  于 2022-12-03  发布在  其他
关注(0)|答案(2)|浏览(159)

我正在尝试使用SQL上的多窗口功能创建一个分组,目标是区分不同的组,如果中间有一些其他组。见下表

Part |       time           |    expected result |
a    | 11-29-2022 00:05:00.000  |       1        |
a    | 11-29-2022 00:05:00.010  |       1        |
b    | 11-29-2022 00:06:00.000  |       2        |
c    | 11-29-2022 00:15:00.000  |       3        |
c    | 11-29-2022 00:15:00.000  |       3        |
b    | 11-29-2022 00:40:00.010  |       4        |
b    | 11-29-2022 00:40:00.020  |       4        |
b    | 11-29-2022 00:40:00.020  |       4        |
b    | 11-29-2022 00:40:00.030  |       4        |

我正在做的事情就像:

Select part, time, count(*) over(Partition by Part order by time )

让我们集中在部分“B”,第一次出现是在第6分钟,之后出现不同的部分和部分b再次出现在第40分钟,所以我需要像时间范围创建分组的东西
还要注意的是,有时候时间是不同的,即使部分是连续的(部分B),这些必须属于同一组。我们试图使用Rank窗口函数,但与'范围之间'不能得到这个结果。
谢谢你!

wlzqhblo

wlzqhblo1#

这是通过dense_rank()实现的另一个选项

Select * 
      ,NewValue = dense_rank() over (order by convert(varchar(25),[Time],120))
 From YourTable

结果

k0pti3hp

k0pti3hp2#

请尝试此sql查询。

Select part, time, dense_rank() over(Partition by Part )

Select part, time, dense_rank() over(Partition by Part order by time rows between unbounded preceding and unbounded following  )

相关问题