Lag函数自定义逻辑输出异常:结果不符预期的技术问询
问题分析与修正方案
原SQL的问题
- 错误使用
LAG()函数:LAG(Value)仅获取上一行的数值,无法跟踪需要持续保留的基准值(直到遇到更小值才更新)。 - 未定义列引用:
AGE_TO_ULTIMATE_NO是未定义的列,应为Value的笔误。 - CASE逻辑错误:原逻辑错误比较相邻行数值,未实现"保留基准值直到更小值出现"的需求。
修正后的SQL
SELECT Id, Value, MIN(Value) OVER (PARTITION BY "Key" ORDER BY Id) AS New_Value FROM your_table_name;
逻辑说明
MIN(Value) OVER (PARTITION BY "Key" ORDER BY Id)会计算每个Key分组内,按Id排序的运行最小值:- 第一行的运行最小值就是自身数值,作为初始基准。
- 后续行若当前数值大于等于当前基准(运行最小值),则基准保持不变;若当前数值更小,运行最小值会更新为该更小值,成为新的基准。
- 此逻辑完全匹配需求:以第一个数值为基准,后续大于基准则沿用基准,小于基准则使用当前值并更新基准。
验证结果
执行上述SQL后,输出将与期望结果完全一致:
| 编号(Id) | 数值(Value) | 新数值(New Value) |
|---|---|---|
| 1 | 1.006212 | 1.006212 |
| 2 | 1.006241 | 1.006212 |
| 3 | 1.007861 | 1.006212 |
| 4 | 1.008858 | 1.006212 |
| 5 | 1.008788 | 1.006212 |
| 6 | 1.008858 | 1.006212 |
| 7 | 1.008639 | 1.006212 |
| 8 | 1.00512 | 1.00512 |
| 9 | 1.00312 | 1.00312 |
内容的提问来源于stack exchange,提问作者Nitin
相关产品推荐
相关产品推荐

