Для чего в 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
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