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 字段。

相关推荐
海南java第二人几秒前
ClickHouse 列式存储深度解析:优点、缺点与选型实战
数据库·clickhouse
就叫_这个吧5 分钟前
理解Java反射机制和内省机制应用与实践
java·开发语言·反射
李白客12 分钟前
MySQL迁移操作手册:一次完整迁移的实战路径
数据库·mysql
尤老师FPGA32 分钟前
QT代码自适应窗口
开发语言·qt
biter down34 分钟前
5:原生 assert 断言
开发语言
布朗克16835 分钟前
12 封装与构造方法
java·开发语言·封装·构造方法
晴天¥36 分钟前
Oracle 19c RAC修改监听默认端口
数据库·oracle
z落落1 小时前
C# 抽象类(abstract)
java·开发语言·c#
皮卡祺q1 小时前
【redis1】基本指令,五大数据类型,存储优化,使用场景】
数据库·redis·缓存
折哥的程序人生 · 物流技术专研1 小时前
AI 编程与行业赋能|专栏总目录(持续更新)
开发语言·人工智能·软件工程·ai编程