数据源如下:
id | order_type | pickup_time |
1 | AAA | 2022/6/7 6:42 |
2 | AAA | 2022/6/7 6:43 |
3 | AAA | 2022/6/7 6:55 |
4 | AAA | 2022/6/8 6:52 |
5 | BBB | 2022/6/7 6:55 |
6 | BBB | 2022/6/7 7:00 |
7 | BBB | 2022/6/7 7:00 |
8 | BBB | 2022/6/7 7:01 |
9 | BBB | 2022/6/7 7:08 |
10 | BBB | 2022/6/7 7:08 |
11 | BBB | 2022/6/7 7:08 |
12 | BBB | 2022/6/7 7:12 |
13 | BBB | 2022/6/7 7:13 |
根据order_type 和 pickup_time排序后,需要得到如下的lot_number列数据, 算法是:相同order_type 的情况下按pickup_time升序排序从第一条开始,时间相差在10分钟以内的为同一批次数据,后条的lot_number用前条相同的时间戳来标示;相差超过10分钟的用另外一个时间戳批次标示,以此类推;需要注意的是:
第9行开始,它的时间7:08 不是和第8行的 7:01分比较,而是和 5,6,7,8行计算的批次号06:55分比比较,这2个时间一比较就大于10分钟了; 因为7:08分和 6:55分 是没法划为10分钟以内同一批次的,必须重新划入下一个批次。
分别用select 和 update 更新到lot_number 列写一下SQL
id | order_type | pickup_time | lot_number | |
1 | AAA | 2022/6/7 6:42 | 2022-06-07 06:42 | 同一批次 |
2 | AAA | 2022/6/7 6:43 | 2022-06-07 06:42 | |
3 | AAA | 2022/6/7 6:55 | 2022-06-07 06:55 | |
4 | AAA | 2022/6/8 6:52 | 2022-06-08 06:52 | |
5 | BBB | 2022/6/7 6:55 | 2022-06-07 06:55 | 同一批次 |
6 | BBB | 2022/6/7 7:00 | 2022-06-07 06:56 | |
7 | BBB | 2022/6/7 7:00 | 2022-06-07 06:55 | |
8 | BBB | 2022/6/7 7:01 | 2022-06-07 06:55 | |
9 | BBB | 2022/6/7 7:08 | 2022-06-07 07:08 | 同一批次 |
10 | BBB | 2022/6/7 7:08 | 2022-06-07 07:08 | |
11 | BBB | 2022/6/7 7:08 | 2022-06-07 07:08 | |
12 | BBB | 2022/6/7 7:12 | 2022-06-07 07:08 | |
13 | BBB | 2022/6/7 7:13 | 2022-06-07 07:08 |
套个变量就可以解决
https://blog.csdn.net/zhangyongze_z/article/details/108356347
可以参考一下此篇文章、
如果有疑问可以回复我