SQL 根据日期字段的最小值和最大值给出的间隔按值分组

SQL group by value depending on an interval given by the min and max of a date field

我有以下 table 给定:

----------------------------     
| x    |  y   | date       |
----------------------------
| 1    | 1    | 01.01.2000 |
| 1    | 1    | 02.01.2000 |
| 1    | 1    | 03.01.2000 |
| 1    | 2    | 04.01.2000 |
| 1    | 2    | 05.01.2000 |
| 1    | 2    | 06.01.2000 |
| 1    | 1    | 07.01.2000 |
| 1    | 1    | 08.01.2000 |
| 1    | 1    | 09.01.2000 |
----------------------------

现在我需要根据 yx 值对 table 进行分组,具体取决于 date 列给出的结果间隔:

-----------------------------------------     
| x    |  y   |  min       | max        |
-----------------------------------------
| 1    | 1    | 01.01.2000 | 03.01.2000 |
| 1    | 2    | 04.01.2000 | 06.01.2000 |
| 1    | 1    | 07.01.2000 | 09.01.2000 |
-----------------------------------------

仅分组 y 将导致错误结果,因为 y 值有可能切换回示例中所述的先前状态。

尝试

select x,y, min(dat), max(dat)
from (
    select x,y, dat, row_number() over(order by dat) - row_number() over(partition by x, y order by dat) as grp
    from mytable 
)
group by x,y, grp
order by  min(dat), x,y

这是一个老招数,row_number( ..)-row_number(partition..)保持相同的值直到分区数据不改变并且当x,y改变时改变值。因此,对于 x,y,此计算的 grp 标识了相同 x,y 的每个组。