SQL, 有终止条件的多次累计计算

复制代码
MSSQL数据库的data表存储了多人上电梯的情况,turn表示进电梯的顺序。电梯最大承重1000公斤,每趟能上的人数有限,超重的人要等下一趟。

|---------|--------|------|
| name | weight | turn |
| Alice | 250 | 1 |
| Bob | 170 | 2 |
| Alex | 350 | 3 |
| John | 400 | 4 |
| Winston | 500 | 5 |
| Marie | 200 | 6 |

复制代码
请计算每趟电梯最后一个进入的人的名字的列表。

|---------|
| Alex |
| Winston |
| Marie |

编写SPL代码:

|---|---------------------------------------------------------|
| | A |
| 1 | =sqlServer1.query("select * from data order by turn") |
| 2 | >cum=0 |
| 3 | =A1.group@i(if( (cum+=weight)>1000, cum=weight, null)) |
| 4 | =A3.(~.m(-1).name) |

A1:用SQL取数,按turn排序。

A2:给累计变量设初值

A3:按每趟电梯分组。当累计值大于 1000 时,开始新的分组,并将累计值重置为当前乘客体重。

A4:取每组的最后一条记录的 name 字段。

相关推荐
wWYy.几秒前
详解redis(5):Gossiping 协议
数据库·redis·缓存
霖霖总总2 分钟前
[小技巧40]MySQL中的MVCC:多版本并发控制的深度解析
数据库·mysql
德彪稳坐倒骑驴3 分钟前
DataX将数据在MySQL和HDFS之间互相迁移
数据库·mysql·hdfs
xiaoye-duck5 分钟前
C++ string 类使用超全攻略(下):修改、查找、获取及常见实用接口深度解析
开发语言·c++·stl
结衣结衣.5 分钟前
Redis中的Hash哈希
数据库·redis·哈希算法
Coder_Boy_6 分钟前
基于SpringAI的在线考试系统-考试管理功能布局+交互优化方案
java·数据库·人工智能·spring boot·交互·ddd·tdd
IT大白7 分钟前
4、数据库的事务
数据库
扑火的小飞蛾12 分钟前
【Oracle Database 分区表】之间隔分区_11g(一)
数据库·oracle
Tao____14 分钟前
可以本地部署的物联网平台
java·开发语言·物联网·mqtt·低代码
码界奇点14 分钟前
基于DDD与CQRS的Java企业级应用框架设计与实现
java·开发语言·c++·毕业设计·源代码管理