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

相关推荐
wjcroom3 小时前
电子python模拟出的一个完美风暴
开发语言·python·数学建模·物理学
fire-flyer3 小时前
第 3 篇:ClickHouse 表结构设计的核心原则
大数据·数据库·clickhouse
aini_lovee3 小时前
基于多时间尺度滚动优化的多能源微网双层调度模型(MATLAB实现)
开发语言·matlab·能源
FinTech老王3 小时前
时序数据库存储引擎解密:LSM-Tree vs B-Tree vs 倒排索引,谁最适合时序场景?
数据库·时序数据库·lsm-tree
极创信息3 小时前
不同开发语言程序如何做信创适配认证?完整流程与评价指标有哪些
java·c语言·开发语言·python·php·ruby·hibernate
阿坤带你走近大数据3 小时前
存储过程在 oracle数据库管理工具里定时自动化运行方案
数据库·oracle·自动化
女王大人万岁3 小时前
Golang实战gin-swagger:自动生成API文档
服务器·开发语言·后端·golang·gin
熬夜的咕噜猫3 小时前
数据库常用SQL命令
数据库·oracle
William Dawson3 小时前
【实战分享】DTU设备高并发数据接入全流程(Redis + RabbitMQ + 数据库)
数据库·redis·rabbitmq
wregjru3 小时前
【MySQL】5. 数据更新与查询详解
java·数据库·mysql