Для чего в Teradata используются неограниченные строки?

Я только начинаю Teradata, и я столкнулся с упорядоченной аналитической функцией, называемой "неограниченные строки" в Teradata. Я попробовал несколько сайтов, чтобы узнать о функции, но все они используют сложный пример, объясняющий то же самое. Не могли бы вы предоставить мне наивный пример, чтобы я мог получить основы ясно.

2 ответов


это предложение "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, тогда нижняя граница рамки просто бесконечна. Это полезно при расчете сумм (т. е. "нарастающие итоги"), например:

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.


ROWS UNBOUNDED PRECEDING не является синтаксисом Teradata, это стандартный SQL. Вместе с ORDER BY определяет окно, в котором вычисляется результат.

логически оконная Агрегатная функция заново вычисляется для каждой строки внутри раздела на основе всех строк между начальной строкой и конец ряда.

начальные и конечные строки могут быть фиксированными или относительно текущая строка на основе следующих ключевых слов:

  • НЕОГРАНИЧЕННЫЙ ПРЕДШЕСТВУЮЩИЙ, все строки перед текущей строкой - > исправлено
  • неограниченное следующее, все строки после текущей строки - > исправлено
  • X предшествующий, X строк перед текущей строкой - > относительный
  • y после, 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