分组计算连续区间

【问题】

Can I group values of an another column into multiple range definitions?

Here's an example table:

mysql> select * from t;

+------+------+

| x    | y    |

+------+------+

|    1 |    1 |

|    2 |    1 |

|    3 |    1 |

|    4 |    2 |

|    5 |    2 |

|    6 |    2 |

|    7 |    1 |

|    8 |    1 |

|    9 |    1 |

+------+------+

I want to select the following info: y=1 has ranges of x: 1-3, 7-9, y=2 has ranges: 4-6.

Definition and data:

create table t (x int, y int);

insert into t(x,y) values (1,1),(2,1),(3,1),(4,2),(5,2),(6,2),(7,1),(8,1),(9,1);

【回答】

SQL做这种序相关的运算很难想清,读出来在外部写容易得多,用SPL就很简单:

A
1=$select x,y from tb order by y,x
2=A1.group@i(y!=y[-1] || x!=x[-1]+1)
3=A2.new(y,concat(~.m(1).x,"-",~.m(-1).x):range)

A1:sql取数,并按照y,x排序

A2:按照同一组中y相同,x连续的规则分组

A3:从每组中提取y和x的范围组成新的序表,结果为:

undefined

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值