【问题标题】:How can I create time range grouping in window function SQL如何在窗口函数 SQL 中创建时间范围分组
【发布时间】:2022-11-30 02:22:31
【问题描述】:

我试图在 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),这些部分必须属于同一组。 试图使用排名窗口功能,但使用“范围介于”无法获得该结果。

谢谢!

【问题讨论】:

  • 请以干净的方式呈现您的数据(选择您的表格数据并按 ctrl+k。并分享您的预期输出

标签: sql sql-server database window-functions


【解决方案1】:

请尝试此 sql 查询。

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

或者

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

【讨论】:

    【解决方案2】:

    通过 dense_rank() 的另一种选择

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

    结果

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-10-02
      • 2021-09-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多