我刚刚开始学习Teradata,在Teradata中遇到了一个名为"Rows unbounded previous"的有序分析函数.我try 了几个网站来了解这个功能,但它们都使用了一个复杂的例子来解释相同的问题.
我刚刚开始学习Teradata,在Teradata中遇到了一个名为"Rows unbounded previous"的有序分析函数.我try 了几个网站来了解这个功能,但它们都使用了一个复杂的例子来解释相同的问题.
它是窗口函数的"frame"或"range"子句,它是SQL标准的一部分,在许多数据库中实现,包括Teradata.
一个简单的例子是计算三天内的平均金额.我使用PostgreSQL语法作为示例,但Teradata的语法相同:
WITH data (t, a) AS (
VALUES(1, 1),
(2, 5),
(3, 3),
(4, 5),
(5, 4),
(6, 11)
)
SELECT t, a, avg(a) OVER (ORDER BY t ROWS BETWEEN 1 PRECEDING AND 1 FOLLOWING)
FROM data
ORDER BY t
... 由此产生:
t a avg
----------
1 1 3.00
2 5 3.00
3 3 4.33
4 5 4.00
5 4 6.67
6 11 7.50
如您所见,每个平均值都是由前一行(1 preceding
)和后一行(1 following
)之间的范围组成的有序帧计算出来的.
当你写ROWS UNBOUNDED PRECEDING
时,框架的下限就是无限的.这在计算总和(即"running totals")时很有用,例如:
WITH data (t, a) AS (
VALUES(1, 1),
(2, 5),
(3, 3),
(4, 5),
(5, 4),
(6, 11)
)
SELECT t, a, sum(a) OVER (ORDER BY t ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW)
FROM data
ORDER BY t
顺从的
t a sum
---------
1 1 1
2 5 6
3 3 9
4 5 14
5 4 18
6 11 29
Here's another very good explanations of SQL window functions