Przenoszenie średnia sql serwer 2008


Pracuję z SQL Server 2008 R2, próbując obliczyć średnią ruchomą. Dla każdego rekordu w moim widoku chciałbym zebrać wartości 250 poprzednich rekordów, a następnie obliczyć średnią dla tego wyboru. Moje kolumny widoku są następujące: TransactionID jest unikalny. Dla każdego TransactionID. Chciałbym obliczyć średnią dla wartości kolumny powyżej 250 rekordów. Tak więc dla TransactionID 300, zebrać wszystkie wartości z poprzednich 250 wierszy (widok jest posortowany malejąco według TransactionID), a następnie w kolumnie MovAvg zapisać wynik średniej z tych wartości. Szukam zebrać dane w zakresie rekordów. Zapytałem Oct 28 14 o 20: 58 Próbuję mieć średnią bieżącą kolumnę w instrukcji SELECT na podstawie kolumny z n poprzednich wierszy w tej samej instrukcji SELECT. Średnia, której potrzebuję, jest oparta na n poprzednich wierszach w zestawie wyników. Pierwsze 3 wiersze kolumny Średnia są puste, ponieważ nie ma poprzednich wierszy. Wiersz 4 w kolumnie Średnia pokazuje średnią z kolumny Liczba z 3 poprzednich wierszy. Potrzebuję pomocy przy konstruowaniu instrukcji SQL Select, która to zrobi. Proste łączyć się może wydawać się o wiele lepsze niż wiersz odwołujący się do podkwerendy Wygeneruj 10k wierszy danych testowych: Wyciągnęłabym specjalny przypadek z pierwszych 3 wierszy z głównego zapytania, możesz UNIONĄ WSZYSTKICH tych z powrotem, jeśli naprawdę chcesz w zestawie wierszy. Zapytanie o samo łączenie: na moim komputerze trwa to około 10 sekund, podejście podkwerendy, które Aaron Alton zademonstrował, zajmuje około 45 sekund (po zmianie tego ustawienia na moją tabelę źródła testowania): Jeśli wykonasz SET STATISTICS PROFILE ON, możesz zobaczyć self join wykonuje 10k na szpuli stołu. Podzapytanie wykonuje 10k na filtrze, agregacie i innych krokach. Chcę obliczyć średnią ruchomą na kolumnie C4 i C5 z trzema rekordami, a wynik powinien być wyprowadzony do innej tabeli. Z góry dziękuję. Data Czas mS C4 C5 08052017 0:00 00: 00,0 0,100341 45,75981 43,77025 08052017 0:00 00: 01,0 0,09143 45,409 44,39561 08052017 0:00 00: 02,0 0,094116 44,87945 43,88213 08052017 0:00 00: 03 0,0 0,099365 45,75981 44,76503 08052017 0:00 00 : 04.0 0.09143 44,35193 44,35193 08052017 0:00 00: 05.0 0,093383 46,90839 43,91423 08052017 0:00 00: 06,0 0,098632 45,75981 43,77025 08052017 0:00 00: 07,0 0,09143 46,3337 45,3 2644 08052017 0:00 00: 08,0 0,092651 45,9439 45,9439 08052017 0:00 00 : 09.0 0.0979 44.76503 44.76503 08052017 0:00 00: 10.0 0.094848 46.14082 45.13776 08052017 0:00 00: 11.0 0.091918 46.13517 45.13224 08052017 0:00 00: 12.0 0.097167 44.76503 44.76503 08052017 0:00 00: 13.0 0.182495 46.06902 44.22626 08052017 0:00 00 : 14,0 0,09143 45,10773 44,00755 08052017 0:00 00: 15,0 0,096435 45,77092 43,78088 08052017 0:00 00: 16,0 0,09143 47,23642 43,2163 08052017 0:00 00: 17,0 0,091308 47,00573 43,00525 08052017 0:00 00: 18,0 0,095703 45,79871 44,80 309 08052017 0:00 00 : 19,0 0,09143 45,193 44,13 882 08052017 0:00 00: 20,0 0,0991308 46,00561 45,00549 08052017 0:00 00: 21,0 0,09497 44,83581 44,83581 08052017 0:00 00: 22,0 0,09143 45,15987 45,15987 08052017 0:00 00: 23,0 0,09143 47 46 08052017 0:00 00: 24,0 0,04238 47,86559 46,86839 08052017 0:00 00: 25.0 0.099365 48,7500 46,76026 08052017 0:00 00: 26,0 0,09143 48,38393 46,36793 08052017 0:00 00: 27,093 955 47 90061 43,90682 08052017 0:00 00: 28,0 0,098754 47,74936 47,74936 wtorek, 23 kwietnia 2017 10:21 Naomi ma rację, brakuje średnika przed instrukcją WITH. dodałem średnią calc dla C4 i C5 w poniższym kodzie, Pozdrawiam, Dineshkumar, proszę oznaczyć jako odpowiedź, jeśli mój post odpowiada na twoje pytanie i głosuj jako pomocny, jeśli pomaga Ci to oznaczyć jako odpowiedź przez kkcci88888 Środa, 24 kwietnia 2017 6: 47 AM środa, 24 kwietnia 2017 5:12 AM Wszystkie odpowiedzi Proszę zamieścić definicję tabeli, przykładowe dane wymagane przez amp; RESULT SET WYRAZ Proszę oznaczyć jako odpowiedź, jeśli mój post działa dla ciebie lub Głosuj jako pomocny, jeśli ci pomaga. Junaid Hassan. Wtorek, 23 kwietnia 2017 r. 10:29 Tak jak zwiastun: WYBIERZ Datetime, AVG (C4) OVER (ORDER BY DateTime ROWS MIĘDZY 2 PRECEDING I BIEŻĄCE WIERSZE), AVG (C5) OVER (ORDER BY DateTime ROWS MIĘDZY 2 PRECEDING CURRENT ROW) FROM tbl To nie będzie działać dla ciebie, ponieważ ta składnia jest dostępna tylko w SQL 2017. Wspominam o tym, ponieważ jeśli masz potrzebę obliczania takich rzeczy jak średnia ruchoma, jest to silna zachęta do przejścia na SQL 2017. inne rozwiązania opublikowane w wątku będą działały, powyższe będzie działać znacznie lepiej. Erland Sommarskog, SQL Server MVP, esquelsommarskog. se Proponowany jako odpowiedź Naomi N Moderator środa, 24 kwietnia 2017 12:22 wtorek, 23 kwietnia 2017 11:14 środa, 24 kwietnia 2017 12:58 Błąd. Proszę dalej doradzać. Środa, 24 kwietnia 2017 r. 1:24 Czy wypróbowałeś rozwiązanie, które napisałem powyżej. jaki był wynik Pozdrawiam, Dineshkumar, proszę Zaznacz jako odpowiedź, jeśli mój post odpowiada na twoje pytanie i Głosuj jako Pomocny, jeśli to pomoże W środę, 24 kwietnia 2017 2:37 Witam, Dineshkum ar Dzięki, ale z twojego rozwiązania, musi ręczne podłączenie surowych rekordów LUB możesz dalej doradzać w zakresie automatycznego przenoszenia rekordów (ponieważ mamy ponad 3 000 000 rekordów w tabeli.) BTW, jestem w trakcie instalacji SQL2017 i spróbuję innego rozwiązania stąd. W najgorszym przypadku napiszę program VB, aby to zrobić, ale wymaga to czasu i niskiej wydajności. Środa, 24 kwietnia 2017 3:31 AM Musisz zastąpić tabelę nazwą tabeli i nie potrzebujesz kodu poprzedzającego instrukcję with - użyto go tylko do zobrazowania Twoich danych. Jeśli chodzi o błąd, który dostałeś z rozwiązaniem Erlands - czy dokładnie przeczytałeś jego komentarz? Jego rozwiązanie działa tylko w SQL Server 2017 i nie działa w poprzednich wersjach SQL Server. Dla każdego eksperta istnieje równy i przeciwny ekspert. - Beckers Law Środa, 24 kwietnia 2017 3:34 AM Tak jak zajawka: WYBIERZ Datetime, AVG (C4) OVER (ORDER BY DateTime ROWS MIĘDZY 2 PRECEDING I BIEŻĄCA WIERSZ), AVG (C5) OVER (ORDER BY DateTime ROWS BETWEEN 2 PRECEDING CURRENT ROW) FROM tbl To nie będzie działać, ponieważ ta składnia jest dostępna tylko w SQL 2017. To okropne naruszenie czystej teorii bazy danych i bardzo mi się podoba środa, 24 kwietnia 2017 3:43 Czy mógłbyś poprawić swój kod SQL, aby utworzyć dołączony. (Chcę mieć średnią ruchomą na kolumnach C4 i C5). 3 000 000 wierszy nazwy tabeli to dbo. myDB. Over3M Dziękuję bardzo. Środa, 24 kwietnia 2017 r. 3:47 Środa, 24 kwietnia 2017 r. 3:53 Komunikat o błędzie jest bardzo precyzyjny i dokładnie informuje o tym, co należy dodać przed instrukcją WITH. Dla każdego eksperta istnieje równy i przeciwny ekspert. - Beckers Law Środa, 24 kwietnia 2017 4:05 sql 2017 nie jest czystą relacyjną bazą danych :-) można również użyć indeksów Columnstore. Środa, 24 kwietnia 2017 4:47 Przepraszamy, to rozwiązanie jest przeznaczone tylko dla SQL 2017. Dlatego właśnie generuje błąd. Uruchom go na SQL 2017. jeśli (pomocny) to głosuj () środa, 24 kwietnia 2017 5:06 Naomi ma rację, brakuje ci średnika przed instrukcją WITH. dodałem średnią calc dla C4 i C5 w poniższym kodzie, Pozdrawiam, Dineshkumar, proszę oznaczyć jako odpowiedź, jeśli mój post odpowiada na twoje pytanie i głosuj jako pomocny, jeśli pomaga Ci to oznaczyć jako odpowiedź przez kkcci88888 Środa, 24 kwietnia 2017 6: 47 AM Środa, 24 kwietnia 2017 5:12 Jesteś świetny i wygląda na to, że działa dobrze, ale zajmuje to już ponad 30 minut (nie masz pewności, ile czasu zajmuje obliczenie 3 000 000 rekordów). BTW, muszę obliczyć średnią ruchomą i wyprowadzić do tabeli, potem muszę zgrupować go na 10 minut i przyjąć MAX avgc4 i avgc5. wszelkie dalsze porady dotyczące sposobu obliczania lub potrzebuję czekać na wygenerowany wynik i użyć innego zapytania do grupowania według datetime w rekordach 10 minut i wykonać MAX na avgc4 avgc5. Wielkie dzięki jeszcze raz. Środa, 24 kwietnia 2017 r. 6:54 Czy możesz jeszcze bardziej rozwinąć swoje pytanie w tej grupie 10 minut Jeśli mógłbyś podać przykład (może być DDL) z przykładowymi danymi i spodziewanymi wynikami, to byłoby to pomocne dla zrozumienie wymagań Pozdrawiam, Dineshkumar, proszę Zaznacz jako odpowiedź, jeśli mój post odpowiada na twoje pytanie i zagłosuj jako pomocny, jeśli pomoże ci środa, 24 kwietnia 2017 7:15 AM Jeśli twój nowy stół (gdzie chciałeś przechowywać te dane) nie jest jeszcze stworzony. skorzystaj z poniższej metody, powiąż sekcje Pozdrawiam, Dineshkumar, proszę oznaczyć jako odpowiedź, jeśli mój post odpowiada na twoje pytanie i zagłosuj jako pomocna, jeśli pomoże ci środa, 24 kwietnia 2017 7:23 Witam, Dineshkum ar To jest moje zapytanie do grupowania rekordów w 10 minut Rezultat, jaki chciałbym mieć, to: (1) Produkować średnią ruchomą co 3 sekundy w kolumnie C4 C5 (2) przez rekord jako element (1) na 10 minut (tj. co 60x10 rekordy), zastosuj MAX (avgc4). MAX (avgc5) Zatem zamierzonym wynikiem końcowym jest data, czas, maks. (Movingavgc4) z każdych 10 minut rekordów, maks. (Movingavgc5) z każdych 10 minut rekordów środa, 24 kwietnia 2017 7:47 Cześć, Dineshkum ar Czy mógłbyś prosić sprawdź składnię, ponieważ wystąpił błąd. Przy okazji, po przejechaniu przez 2,1 godziny, przerywam, a wynik to tylko 94019 rekordów. Tabela zawiera 3 000 000, więc potrzebuje około 65 godzin. Środa, 24 kwietnia 2017 r. 8:46 Umieść swój tablename w miejscu quotyournewtablequot w powyższym scenariuszu. nie musisz używać tego quotselect do db0.dlamvagquot w swoim kodzie. Właśnie wspomniałem o quizie wyboru, aby pokazać, że jest to metoda wstawiania wybranych rekordów do nowej tabeli, ponieważ wstawianie rekordów do istniejących rekordów ma inną składnię: Pozdrawiam, Dineshkumar, Proszę oznaczyć jako odpowiedź, jeśli mój post odpowiada na twoje pytanie i Głosowanie jako pomocne, jeśli jest pomaga Edytowane przez Dinesh Kumar Rajendran środa, 24 kwietnia 2017 08:58 Środa, 24 kwietnia 2017 08:55 Dzięki. teraz działa. Środa, 24 kwietnia 2017 r. 9:06 Trwa 17 godzin, ale nie ma rekordu wyjściowego do nowej listy. Czwartek, 25 kwietnia 2017 r., Godz. 1:23 Firma Microsoft przeprowadza ankietę internetową, aby poznać Twoją opinię na temat witryny internetowej Msdn. Jeśli zdecydujesz się wziąć udział, ankieta online zostanie przedstawiona użytkownikowi po opuszczeniu witryny internetowej Msdn. Chciałbyś wziąć udział w 2017 Microsoft. Wszelkie prawa zastrzeżone.

Comments