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 |
----------------------------
现在我需要根据 y
和 x
值对 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
的每个组。
我有以下 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 |
----------------------------
现在我需要根据 y
和 x
值对 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
的每个组。