如何检查光标范围内的最大值?
Posted
技术标签:
【中文标题】如何检查光标范围内的最大值?【英文标题】:How to check max from range in cursor? 【发布时间】:2020-11-05 19:56:20 【问题描述】:我在将 Excel 公式传输到 SQL 时遇到问题。我的excel公式是:=IF(P2<(MAX($P$2:P2));"Move";"")
。
excel中的P列是一个数字序列。
a | b
------
1
2
7
3 MOVE
4 MOVE
8
9
5 MOVE
10
您可以在此屏幕截图中找到更多示例:
我创建了一个带循环的游标,但我不知道如何检查范围内的最大值。 例如,当我迭代第四行时,我必须检查 1-4 行等的最大值。
【问题讨论】:
【参考方案1】:不需要游标和循环。假设您有一列定义了行的顺序(例如, id
),您可以使用窗口函数:
select t.*,
case when a < max(a) over(order by id) then 'MOVE' end as b
from mytable t
【讨论】:
【参考方案2】:一种选择是使用MAX()
Analytic function 。但是在任何情况下,您都会有一个额外的列,例如 id
用于排序,以便从第一行确定当前行的最大值,因为 SQL 语句表示无序集。如果您的 id
列的值按示例数据中的顺序排列,请考虑使用
WITH t2 AS
(
SELECT MAX(a) OVER (ORDER BY id ROWS BETWEEN
UNBOUNDED PRECEDING
AND
CURRENT ROW) AS max_upto_this_row,
t.*
FROM t
)
SELECT a, CASE WHEN max_upto_this_row > a THEN 'Move' END AS b
FROM t2
ORDER BY id;
Demo
【讨论】:
以上是关于如何检查光标范围内的最大值?的主要内容,如果未能解决你的问题,请参考以下文章