Saturday 14 October 2017

Przenoszenie Średnio W Sql Zapytanie


Jest to pytanie Evergreen Joe Celko Zignoruj, która platforma DBMS jest używana Ale w każdym razie Joe był w stanie odpowiedzieć ponad 10 lat temu ze standardowym SQL. Joe Celko SQL Puzzle i odpowiedzi cytat Ostatnia próba aktualizacji sugeruje, że możemy użyć predykatu skonstruować kwerendę, która dałaby nam średnią ruchową. Czy dodatkowa kolumna lub podejście do zapytania jest lepsze? Kwestia jest technicznie lepsza, ponieważ podejście UPDATE spowoduje denormalizację bazy danych. Jednakże, jeśli zapisane dane historyczne nie będą zmieniać i obliczać średnia ruchoma jest droższa, możesz rozważyć użycie podejścia w kolumnie. SQL Puzzle query. by wszystko oznacza jednolite Wystarczy wrzucić do odpowiedniego wiaderka w zależności od odległości od aktualnego punktu czasowego Na przykład weź ciężar 1 dla punktów danych w ciągu 24 godzin od bieżącego punktu danych waga 0 5 dla punktów danych w ciągu 48 godzin W tym przypadku ważne jest, ile kolejnych punktów danych, takich jak 6 12 i 11 48 minut są oddalone od siebie Przypadek użycia I c pomyślałem o próbie wygładzenia histogramu wszędzie tam, gdzie punkty pomiarowe nie są wystarczająco gęste msciwoj 27 maja 15 w 22 22. Nie jestem pewien, że oczekiwany wynik wyjściowy pokazuje klasyczną prostą średnią kroczącą ruchu przez 3 dni Ponieważ na przykład pierwszy trzydzieści liczb według definicji daje. ale spodziewasz się 4 360 i to mylące. Niemniej jednak proponuję następujące rozwiązanie, które wykorzystuje funkcję okienkową AVG To podejście jest znacznie wydajniejsze i mniej zasobochłonne niż SELF-JOIN wprowadzone w innych odpowiedzi i jestem zaskoczony, że nikt nie dał lepszego rozwiązania. Widzisz, że AVG jest zawinięty w przypadku gdy rownum następnie zmusić NULL s w pierwszych wierszach, gdzie 3 dniowy ruch średnia jest bez znaczenia. może zastosować metodę Joe Celko brudną lewą zewnętrzną łączność, jak wspomniano powyżej przez Diego Scaravaggi, aby odpowiedzieć na pytanie, jak to zostało zadane. Generuje żądane wyjście. z SQL Server 2008 R2 , próbując obliczyć średnią ruchomą Dla każdego rekordu w moim widoku chciałbym zebrać wartości z 250 poprzednich rekordów, a następnie obliczyć przeciętną dla tej selekcji. Moje kolumny widoku są następujące. Przykłady unikatowe Dla każdego identyfikatora transakcji I chciałby obliczyć średnią dla wartości kolumny, w porównaniu z poprzedniami 250 rekordami Więc dla TransactionID 300 zebrać wszystkie wartości z poprzedniego widoku 250 wierszy sortowane malejąco według TransactionID, a następnie w kolumnie MovAvg zapisać wynik średniej z tych wartości, które chcę zbieranie danych w obrębie zakresu rekordów. 28 października 14 w 20 58. Wykorzystanie prostej średniej ruchomej, aby wygładzić dane jest dość popularną techniką, to jest zbyt źle podstawowym przykładem w Pomocy SQL Anywhere jest dalekie od tego, co sprawia, że ​​ten przykład tak skomplikowane Poza raportem o problemie, który oblicza średnią ruchową całej sprzedaży produktów, wg miesiąca, w roku 2000. Oto, co sprawia, że ​​jest skomplikowana. dwa odwołania do funkcji AVG. a GROUP BY, samo dotyczy dowolnego WYBIERZ głowicy. klauzulę kryjącą WINDOW. klauzula WINDOW, która nawet nie używa słowa kluczowego WINDOW tak, aby osoby niewidomione, które potrzebują przykładów bardziej niż ktokolwiek inny, nie są oczywiste, że w ogóle jest zaangażowany Windows. Nie tylko dowolny klauzulę WINDOW, ale jeden, który zawiera każdy pojedynczy element, który możesz wpisać w klauzuli WINDOW. a PARTITION BY. a RANGE, a nie prostej klauzuli ROWS, ale pełnowartościowej klauzuli RANGE, która ma intymną relację z ORDER BY Wiem, jaki jest wiersz, ale to, co zostało redaktowane, to RANGE. Ale poczekaj, jest więcej Wybór RANGE w tym przykładzie jest kluczowy dla prawidłowego działania kwerendy dla bardziej kompletnej dyskusji na ten konkretny przykład, patrz Przykład 23 - Obliczanie średniej ruchomej w Glenn Paulley s doskonały OLAP biały papier Teraz, niech się powrócić na torze. Naprawdę bardzo prosty ruch Średnia. W poniższym przykładzie wyświetla 10 dni wartości danych wraz z średnią ruchomą dzisiejszej wartości i wczoraj s Klauzula WINDOW na liniach Od 21 do 23 definiuje okno PRZEWODNE, a wiersz ROWS wyznacza rozmiar okna zawsze dwa rzędy. Niektóre określenie PRZEZNACZENIE oznacza poprzedni wiersz przez klauzulę ROWS. AVG OVER twodays w wierszu 19 odnosi się do klauzuli WINDOW według nazwy i mówi, że SQL Anywhere oblicza średnią z dwóch wartości występujących w oknie przesuwnym 2 rzędu, dla każdego wiersza w zestawie wyników. Więc na 2017 -02-02 średnio 10 i 20 to 15 000000.for 2017-02-03 średnio 20 i 10 to 15 000000.for 2017-02-04 średnio 10 i 30 to 20 000000.for 2017-02 -10 średnio 10 i 60 to 35 000000.Ops, co z pierwszym wierszem. Wiersz 2017-02-01 nie ma wiersza PRECINGING, więc jaka jest średnia w ruchu window. Theo Glenn Paulley s biały w przypadku ruchomego okna przyjmuje się, że wiersze zawierające wartości Null istnieją przed pierwszym wierszem i po ostatnim wierszu, w pliku inpu t. Oznacza to, że gdy okno ruchomych ma 2017-02-01 jako bieżący rząd, wiersz 1 PRECINGING zawiera wartości NULL, a gdy SQL Anywhere oblicza AVG, który zawiera wartość NULL, nie nalicza NULL na wszystkich, a nie w licznik lub w mianowniku podczas obliczania średniej Oto dowód To dlatego twodayaverage 10 000000 dla pierwszego rzędu 2017-02-01.Posted by Breck Carter o 3 47 PM.

No comments:

Post a Comment