【背景】
这里的跨行计算不是指整体聚合类的函数比如SUM等的功能,而是指递归算法。
比如我接到有需求,有一个结果字段需要是目前所有行该字段的和,这是属于递归类的算法,SQL中如何实现呢?
【方法】
可以使用窗口函数,比如:
SELECT
sales_date,
sales_amount,
LAG(sales_amount) OVER (ORDER BY sales_date) AS prev_sales_amount
FROM
sales_data;
这里面的LAG代表前一行的值,顺序由Order By指定。这里是直接获得了上一行的值,如果再和本行进行计算,就可以实现各类递归算法。
除了LAG,通用SQL中还有LEAD,用法差不多,只不过代表下一行的值。
【注意】
不同的数据库,关键词和语法会有所变化,但是大差不差,心法是差不多的。
比如PostgreSQL还有FIRST_VALUE函数等。