ROWS UNBOUNDED PRECEDING 在 Teradata 中的用途是什么?

问题描述 投票:0回答:3

我刚刚开始使用 Teradata,在 Teradata 中遇到了一个名为“无界前行行”的有序分析函数。我尝试了几个网站来了解该功能,但它们都使用一个复杂的示例来解释相同的功能。 您能否为我提供一个简单的示例,以便我能够清楚地了解基础知识?

sql teradata window-functions analytic-functions
3个回答
176
投票

它是窗口函数的“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

如您所见,每个平均值都是在“over”一个有序框架上计算的,该框架由前一行 (

1 preceding
) 和后一行 (
1 following
) 之间的范围组成。

当你写下

ROWS UNBOUNDED PRECEDING
时,框架的下限就是无限的。这在计算总和时很有用(即“运行总计”),例如:

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

这是 SQL 窗口函数的另一个很好的解释


105
投票

ROWS UNBOUNDED PRECEDING
不是 Teradata 特定的语法,它是标准 SQL。它与
ORDER BY
一起定义计算结果的窗口。

逻辑上,基于起始行和后续行之间的所有行,为 PARTITION 中的每一行重新计算一个窗口聚合函数。 结束行。

起始行和结束行可能是固定的或相对于 当前行基于以下关键字:

  • CURRENT ROW,当前行
  • UNBOUNDED PRECEDING,当前行之前的所有行 -> 固定
  • UNBOUNDED FOLLOWING,当前行之后的所有行 -> 固定
  • x PRECEDING,当前行之前的 x 行 -> 相对
  • y FOLLOWING,当前行之后的 y 行 -> 相对

可能的计算类型包括:

  • 起始行和结束行都是固定的,窗口由分区的所有行组成,例如组总和,即聚合加详细行
  • 一端固定,另一端相对于当前行,行数增加或减少,例如运行总计、剩余金额
  • 起始行和结束行是相对于当前行的,窗口内的行数是固定的,例如n
  • 的移动平均线

因此

SUM(x) OVER (ORDER BY col ROWS UNBOUNDED PRECEDING)
会产生 累积总和运行总计

11 -> 11
 2 -> 11 +  2                = 13
 3 -> 13 +  3 (or 11+2+3)    = 16
44 -> 16 + 44 (or 11+2+3+44) = 60

0
投票

您的代码不会生成结果。

此代码修复了它。

;WITH data (t, a) AS 
(SELECT * FROM (
  VALUES(1, 1.0),
        (2, 5),
        (3, 3),
        (4, 5),
        (5, 4),
        (6, 11)
        ) AS T1(t,a)
)
© www.soinside.com 2019 - 2024. All rights reserved.