示例——稀疏数据的全局变量
在 OEX 上浏览我的包时,我想起了一个
关于SQL主机变量的示例。
您可能看过我关于《Open Exchange Reviews》的系列文章
每条报告行都会被分配一个系列编号(末尾的 #76)
一旦发布,我就不再太关注它了。
我只关注最后那份尚未发布的、带有 MAX(serial) 的报告。
简单思路:
SELECT serial,label, . . . from oex.dir WHERE serial = MAX(serial)哎呀:: SQLCODE=-19
聚合函数不能用于WHERE或GROUP BY子句中
此外:对每个“serial”的出现位置都运行MAX(),性能并不理想。
我当时想找一种方法,计算出一个静态值来与之进行比较。
因此,我编写了一个名为 SMX 的自定义静态 SQL 方法,如下所示:
ClassMethod SMX(dif As %Integer = 0) As %Integer [ SqlName = SMX, SqlProc ]
{
set max=$g(^||max,0)
if 'max {
&sql(SELECT max(serial) into :max from oex.dir)
set ^||max=max
}
quit max+dif
}以及相关的 SELECT 语句
SELECT serial,label, . . . from oex.dir WHERE serial=oex.SMX()现在它运行效果如预期
说明:
- 该附加参数允许相对于 MAX 进行一定偏移
- 该方法是静态的,因为调用时未将任何列名作为参数传入
- 该值存储在一个仅存在于您进程内的 PPG 中
- 它不会在日志中留下任何痕迹
- 该值仅在您的流程内计算一次
在实际应用中,这可能适用于以下所有情况:
需要按天、周……等单位统计多条记录的情况,
讨论 (0)0