SQL:如何将有序行分成组;根据分组行进行拆分

标签 sql grouping

我有按日期排序的行,我需要根据在分组中创建“中断”的字段将其分成单独的组。断开的行将被删除,因此它们需要位于自己的组中。答案可能存在于某处,但我找不到任何东西。我可以用循环来做到这一点,但我不想这样做。

示例:

Date          BreakField    Group (this is the field I need)
2018-07-01    0             1
2018-07-02    0             1
2018-07-03    0             1
2018-07-04    1             0
2018-07-05    0             2
2018-07-06    0             2

最佳答案

您可以使用row_numbers的差异来定义组:

select Date, BreakField, (case when breakfield = 1 then 0 
                              else dense_rank() over (order by grp) 
                          end) as Group 
from (select *, row_number() over (order by date) -
                row_number() over (partition by breakfield order by date) as grp
      from table
     ) t
order by date;

关于SQL:如何将有序行分成组;根据分组行进行拆分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51355995/

相关文章:

mysql - 阐明如何使用 WITH、AS 函数代替子查询

ms-access - 在 Access 窗体上将控件分组在一起

algorithm - 对连接的值对进行分组

javascript - 如何将对象数组转换为自定义分组数组

grouping - 将新组添加到具有现有组的 SSRS tablix?

r - 创建列出一个变量与另一个变量分组的值的data.table

mysql - 关于订单类型(购买/返回)的最多订单的 SQL 查询?

sql - 在同一张表上使用 postgis 几何编写 SQL 查询

sql - 如何找到调用存储过程/函数

sql - 获取指定日期的上一个星期二(或一周中的任何给定日期)