Mam tabeli S z szeregów czasowych, takich jak ten:Optymalizacja zapytania Vertica SQL do czynienia z systemem wynosi
key day delta
dla danego klucza, to jest możliwe, ale mało prawdopodobne, że dzień będzie brakowało.
Chciałbym skonstruować kolumnę skumulowaną z wartości delta (dodatnie INT), w celu wstawienia tych danych skumulowanych do innej tabeli. To, co mam do tej pory:
SELECT key, day,
SUM(delta) OVER (PARTITION BY key ORDER BY day asc RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW),
delta
FROM S
W moim smaku SQL, klauzula domyślne okno jest zakres między bezgranicznym poprzedzające i bieżącego wiersza, ale zostawiłem to tam być jawne.
To zapytanie jest bardzo powolne, podobnie jak rząd wielkości wolniejszy niż stare zepsute zapytanie, które wypełniło 0 dla łącznej liczby. Wszelkie sugestie dotyczące innych metod generowania liczb skumulowanych?
zrobiłem patrzeć rozwiązaniami tutaj: Running total by grouped records in table
RDBMS Używam jest Vertica. Vertica SQL wyklucza tam pierwsze rozwiązanie podselekcji, a jego planer zapytań przewiduje, że drugie lewe połączenie zewnętrzne jest około 100 razy bardziej kosztowne niż analityczna forma, którą pokazałem powyżej.
Co rzuty zostały zdefiniowane dla tej tabeli? Ile wierszy i różnych kluczy? Jak powolny jest "bardzo wolny"? –
Ile wierszy masz w tabeli? W jaki sposób dzielisz/dzielisz projekcję główną dla tej tabeli? – mtrbean
Bardzo trudno mi to zrozumieć! Czy mógłbyś podać przykładowe dane z wymaganymi danymi wyjściowymi? – AK47