2015-06-16 47 views
16

Właśnie zaczynam od Teradata i natrafiłem na uporządkowaną funkcję analityczną o nazwie "Wiersze bez ograniczeń poprzedzających" w Teradata. Próbowałem kilku stron, aby poznać tę funkcję, ale wszystkie używają skomplikowanego przykładu wyjaśniającego to samo. Czy mógłbyś podać mi naiwny przykład, aby uzyskać jasne podstawy.Co to jest ROWS UNBOUNDED PRECEDING stosowany w Teradata?

Odpowiedz

42

Jest to klauzula "ramki" lub "zakresu" funkcji okna, które są częścią standardu SQL i zaimplementowane w wielu bazach danych, w tym Teradata.

Prostym przykładem może być obliczenie średniej kwoty w ciągu trzech dni. Używam składni PostgreSQL dla przykładu, ale to będzie taka sama dla 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 

... co daje:

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 

Jak widać, każda obliczana jest średnia " ponad " zamówioną ramkę zawierającą zakres między poprzednim wierszem (1 preceding) a kolejnym wierszem (1 following).

Podczas pisania ROWS UNBOUNDED PRECEDING, dolna granica ramki jest po prostu nieskończona. Jest to użyteczne przy obliczaniu sumy (tj "running totals"), na przykład:

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 

otrzymując ...

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.

19

ROWS UNBOUNDED PRECEDING to nie specyficzna dla Teradata składnia, to standardowa instrukcja SQL. Razem z ORDER BY definiuje okno, w którym obliczany jest wynik.

Logicznie, funkcja zagregowanego agregatu jest nowo obliczana dla każdego wiersza w ramach PARTYCJI na podstawie wszystkich WIERSZY między wierszem początkowym a końcowym wierszem .

Rozpoczynanie i kończenie wierszy może być stałe lub w stosunku do bieżącego wiersza w oparciu o następujące słowa kluczowe:

  • nieograniczona poprzedniego, wszystkie wiersze przed bieżącym wierszu -> stałe
  • nieograniczona Poniżej, wszystkie wiersze po bieżącym wierszu -> stałe
  • x poprzednim x rzędy przed bieżącym wierszu -> stosunku
  • Y następujące składniki, Y rzędy po bieżącym wierszu -> stosunku

możliwych rodzajów obliczeń są:

  • zarówno początek i koniec wiersza są stałe, okno obejmuje wszystkie rzędy przegrody, np Suma grupowa, tj. rzędy agregatów plus szczegółowe
  • Jeden koniec jest stały, drugi w stosunku do bieżącego rzędu, liczba rzędów rośnie lub maleje, np. a Running Total, Remaining Sum
  • Początkowy i końcowy wiersz odnoszą się do bieżącego wiersza, liczba wierszy w oknie jest stała, np.średniej ruchomej ponad n wierszy

Więc SUM(x) OVER (ORDER BY col ROWS UNBOUNDED PRECEDING) skutkuje skumulowana suma lub Running Razem

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