Male zapytanie - prosba o pomoc
Juan Rodrigez - 12-09-2007 00:15
Male zapytanie - prosba o pomoc
Witam,
Mam tabele w której są m.in. takie kolumny, URZADZENIE varchar POMIAR float CZAS_POMIARU timestamp
Do tej tabeli zapisywane są w nieregularny sposób wyniki pomiarów dla poszczególnych urządzeń.
próbuje ułożyć zapytanie które zwróci mi średnią (lub sumę) z ostatnich pomiarów dla wybranej listy urządzeń
dla sumy wystarczy pewnie zmienić AVG na SUM
Dla pojedynczego urzadzenia mam tak:
select AVG(POMIAR) from TABELA where URZADZENE='abc' AND CZAS_POMIARU=(select max(CZAS_POMIARU) from TABELA where URZADZENIE='abc')
A jak to zrobić dla podanej listy urządzeń? kombinowałem troche z URZADZENE IN ('abc' , 'xyz') ale bez spodziewanych rezultatów.
pozdrawiam Juan
-- Wysłano z serwisu OnetNiusy: http://niusy.onet.pl
=?ISO-8859-2?Q?Marcin_Wr=F3blewski?= - 13-09-2007 00:04
Juan Rodrigez <juan_rodrigezWYTNIJTO@poczta.onet.pl> napisał(a):
> Witam, > > Mam tabele w której są m.in. takie kolumny, > URZADZENIE varchar > POMIAR float > CZAS_POMIARU timestamp > > Do tej tabeli zapisywane są w nieregularny sposób wyniki pomiarów dla > poszczególnych urządzeń. > > próbuje ułożyć zapytanie które zwróci mi > średnią (lub sumę) z ostatnich pomiarów dla wybranej listy urządzeń > > dla sumy wystarczy pewnie zmienić AVG na SUM > > Dla pojedynczego urzadzenia mam tak: > > select AVG(POMIAR) from TABELA where URZADZENE='abc' AND CZAS_POMIARU=(select > max(CZAS_POMIARU) from TABELA where URZADZENIE='abc') > > A jak to zrobić dla podanej listy urządzeń? > kombinowałem troche z URZADZENE IN ('abc' , 'xyz') > ale bez spodziewanych rezultatów. > > pozdrawiam > Juan > > >
Jak kombinowałeś, jakie miały być rezultaty i jakie były rezultaty?
-- Wysłano z serwisu Usenet w portalu Gazeta.pl -> http://www.gazeta.pl/usenet/
=?ISO-8859-2?Q?Marcin_Wr=F3blewski?= - 13-09-2007 00:04
Juan Rodrigez <juan_rodrigezWYTNIJTO@poczta.onet.pl> napisał(a):
> Witam, > > Mam tabele w której są m.in. takie kolumny, > URZADZENIE varchar > POMIAR float > CZAS_POMIARU timestamp > > Do tej tabeli zapisywane są w nieregularny sposób wyniki pomiarów dla > poszczególnych urządzeń. > > próbuje ułożyć zapytanie które zwróci mi > średnią (lub sumę) z ostatnich pomiarów dla wybranej listy urządzeń > > dla sumy wystarczy pewnie zmienić AVG na SUM > > Dla pojedynczego urzadzenia mam tak: > > select AVG(POMIAR) from TABELA where URZADZENE='abc' AND CZAS_POMIARU=(select > max(CZAS_POMIARU) from TABELA where URZADZENIE='abc') > > A jak to zrobić dla podanej listy urządzeń? > kombinowałem troche z URZADZENE IN ('abc' , 'xyz') > ale bez spodziewanych rezultatów. > > pozdrawiam > Juan > > >
Jak kombinowałeś, jakie miały być rezultaty i jakie były rezultaty?
-- Wysłano z serwisu Usenet w portalu Gazeta.pl -> http://www.gazeta.pl/usenet/
Grzegorz Danowski - 13-09-2007 00:04
"Juan Rodrigez" <juan_rodrigezWYTNIJTO@poczta.onet.pl> wrote in message news:0747.0000012a.46e6eec3@newsgate.onet.pl... > Mam tabele w której są m.in. takie kolumny, > URZADZENIE varchar > POMIAR float > CZAS_POMIARU timestamp > > Do tej tabeli zapisywane są w nieregularny sposób wyniki pomiarów dla > poszczególych urządzeń. > > próbuje ułożyć zapytanie które zwróci mi > średnią (lub sumę) z ostatnich pomiarów dla wybranej listy urządzeń
Najpierw znajdź dla każdego urządzenia ostatnie pomiary: Create View OstatniePomiary As Select Urzadzenie, Max(CZAS_POMIARU) From TABELA Group By Urzadzenie Go
I potem średnie z ostatnich pomiarów:
Select Urzadzenie, AVG(POMIAR) From TABELA As T Inner Join OstatniePomiary As O On T.Urzadzenie = O.Urzadzenie Group By Urzadzenie
Oczywiście możesz w powyższym dodać warunek Where: .... On T.Urzadzenie = O.Urzadzenie Where Urzadzenie In ('abc' , 'xyz') Group By Urzadzenie
No i jeśli chcesz, to zamiast dodatkowego widoku możesz użyć podzapytania, np:
Select Urzadzenie, AVG(POMIAR) From TABELA As T Inner Join (Select Urzadzenie, Max(CZAS_POMIARU) From TABELA Group By Urzadzenie) As O On T.Urzadzenie = O.Urzadzenie Where Urzadzenie In ('abc' , 'xyz') Group By Urzadzenie
-- Pozdrawiam Grzegorz http://gdanowski.blogspot.com/
miobeb@gmail.com - 13-09-2007 00:04
On 12 Wrz, 09:53, "Grzegorz Danowski" <gdn__na@serwerze__poczta.onet.pl> wrote: > "Juan Rodrigez" <juan_rodrigezWYTNI...@poczta.onet.pl> wrote in message > > news:0747.0000012a.46e6eec3@newsgate.onet.pl... > > > Mam tabele w której są m.in. takie kolumny, > > URZADZENIE varchar > > POMIAR float > > CZAS_POMIARU timestamp > > > Do tej tabeli zapisywane są w nieregularny sposób wyniki pomiarówdla > > poszczególych urządzeń. > > > próbuje ułożyć zapytanie które zwróci mi > > średnią (lub sumę) z ostatnich pomiarów dla wybranej listy urządzeń > > Najpierw znajdź dla każdego urządzenia ostatnie pomiary: > Create View OstatniePomiary > As > Select > Urzadzenie, > Max(CZAS_POMIARU) > From > TABELA > Group By > Urzadzenie > Go > > I potem średnie z ostatnich pomiarów: > > Select > Urzadzenie, > AVG(POMIAR) > From > TABELA As T > Inner Join > OstatniePomiary As O > On > T.Urzadzenie = O.Urzadzenie > Group By > Urzadzenie > > Oczywiście możesz w powyższym dodać warunek Where: > ... > On > T.Urzadzenie = O.Urzadzenie > Where > Urzadzenie In ('abc' , 'xyz') > Group By > Urzadzenie > > No i jeśli chcesz, to zamiast dodatkowego widoku możesz użyć podzapytania, > np: > > Select > Urzadzenie, > AVG(POMIAR) > From > TABELA As T > Inner Join > (Select > Urzadzenie, > Max(CZAS_POMIARU) > From > TABELA > Group By > Urzadzenie) As O > On > T.Urzadzenie = O.Urzadzenie > Where > Urzadzenie In ('abc' , 'xyz') > Group By > Urzadzenie > > -- > Pozdrawiam > Grzegorzhttp://gdanowski.blogspot.com/
To zapytanie jest w ogóle złe, bo nie ma warunku na wcześniej wyliczony max(CZAS_POMIARU). Jeśli dla danego urzazenia z danym CZASEM_POMIARU jest wpisana tylko jedna wartość pomiaru to należy zrobić tak: Select Urzadzenie, Pomiar From TABELA As T Inner Join (Select Urzadzenie, Max(CZAS_POMIARU) max_czas From TABELA Group By Urzadzenie) As O On T.Urzadzenie = O.Urzadzenie and T.CZAS_POMIARU = O.max_czas Where Urzadzenie In ('abc' , 'xyz')
a jeśli kilka to tak
Select Urzadzenie, AVG( Pomiar) Avg_Pomiar From TABELA As T Inner Join (Select Urzadzenie, Max(CZAS_POMIARU) max_czas From TABELA Group By Urzadzenie) As O On T.Urzadzenie = O.Urzadzenie and T.CZAS_POMIARU = O.max_czas Where Urzadzenie In ('abc' , 'xyz') group by Urzadzenie
Pozdr.,
Michał
Grzegorz Danowski - 13-09-2007 00:04
<miobeb@gmail.com> wrote in message news:1189588916.729648.31960@r29g2000hsg.googlegro ups.com... .... > > Select > Urzadzenie, > AVG(POMIAR) > From > TABELA As T > Inner Join > (Select > Urzadzenie, > Max(CZAS_POMIARU) > From > TABELA > Group By > Urzadzenie) As O > On > T.Urzadzenie = O.Urzadzenie
<cite> To zapytanie jest w ogóle złe, bo nie ma warunku na wcześniej wyliczony max(CZAS_POMIARU). Jeśli dla danego urzazenia z danym CZASEM_POMIARU jest wpisana tylko jedna wartość pomiaru to należy zrobić tak: .... Max(CZAS_POMIARU) max_czas .... On T.Urzadzenie = O.Urzadzenie and T.CZAS_POMIARU = O.max_czas .... </cite>
Oczywiście zapomniałem po co wyciągnąłem max czas pomiaru. Dzięki za sprostowanie. -- Pozdrawiam Grzegorz http://gdanowski.blogspot.com/
=?ISO-8859-2?Q?Pawe=B3_Matejski?= - 13-09-2007 00:04
Juan Rodrigez wrote: > Witam, > > Mam tabele w której są m.in. takie kolumny, > URZADZENIE varchar > POMIAR float > CZAS_POMIARU timestamp > > Do tej tabeli zapisywane są w nieregularny sposób wyniki pomiarów dla > poszczególnych urządzeń. > > próbuje ułożyć zapytanie które zwróci mi > średnią (lub sumę) z ostatnich pomiarów dla wybranej listy urządzeń > > dla sumy wystarczy pewnie zmienić AVG na SUM > > Dla pojedynczego urzadzenia mam tak: > > select AVG(POMIAR) from TABELA where URZADZENE='abc' AND CZAS_POMIARU=(select > max(CZAS_POMIARU) from TABELA where URZADZENIE='abc') > > A jak to zrobić dla podanej listy urządzeń? > kombinowałem troche z URZADZENE IN ('abc' , 'xyz') > ale bez spodziewanych rezultatów.
A o jaką bazę chodzi?
-- P.M.
Juan Rodrigez - 13-09-2007 00:04
Dzięki za odpowiedzi - to było tego czego potrzebowałem
J.
-- Wysłano z serwisu OnetNiusy: http://niusy.onet.pl
Juan Rodrigez - 13-09-2007 00:04
> A o jaką bazę chodzi? >
MySQL 5
Juan
-- Wysłano z serwisu OnetNiusy: http://niusy.onet.pl
zanotowane.pldoc.pisz.plpdf.pisz.pleffulla.pev.pl
|
Oracle, SQL, PL/SQL. Jak =?ISO-8859-2?Q?napisa=E6_zapytanie=2C?==?ISO-8859-2?Q?_kt=F3re_zwr=F3ci_nazw=EA_atrybutu=2C_kt=F3reg o?==?ISO-8859-2?Q?_warto=B6ci_spe=B3niaj=B1_zadany_warunek?=
=?ISO-8859-2?Q?Narz=EAdzie_do_budowania_zapyta=F1_SQL=2C?==?I SO-8859-2?Q?_PL/PgSQL=2C_PL/SQL=2C_T-SQL?=
[ms sql] =?ISO-8859-2?Q?wy=B6wietlenie_pierwszych_5_rekord?==?ISO-8859-2?Q?=F3w_z_zapytania_=3F_odpowiednik_ROWNUM_w_o?== ?ISO-8859-2?Q?raclu_dla_MS_SQL=27a?=
phpMyAdmin zadaje =?ISO-8859-2?Q?z=B3e_zapytania=2E=2E=2E_Dl?==?ISO-8859-2?Q?aczego=3F?=
[MSSQL2000] Problem z =?ISO-8859-2?Q?tabel=B1/indeksem/zapytanie?==?ISO-8859-2?Q?m_czy_b=B3=B1d_w_bazie_danych=2E=2E=2E?=
[mysql 5.x] jak =?ISO-8859-2?Q?zrealizowa=E6_zapytanie=3F_cz?==?ISO-8859-2?Q?yli_podzapytanie_i_wi=EAcej_ni=BF_jeden_rz=B1? ==?ISO-8859-2?Q?d_wynik=F3w?=
[oracle] zapytanie dynamiczne z =?ISO-8859-2?Q?=22dynamiczn=B1_?==?ISO-8859-2?Q?nazw=B1_tabeli=22?=
[mysql/php] jak =?ISO-8859-2?Q?zliczy=E6_ilo=B6=E6_unikalnyc?==?ISO-8859-2?Q?h_rekord=F3w_w_jednym_zapytaniu=3F?=
[MySQL] Zapytanie z =?ISO-8859-2?Q?dw=F3ch_tabel_na_raz_?==?ISO-8859-2?Q?i_grupowanie_po_wsp=F3lnym_polu=2E_Jak_=3F?=
mecze sie i mecze i nic - zapytanie czesciowe
zanotowane.pldoc.pisz.plpdf.pisz.plczterowers.keep.pl
Cytat
Decede mihi sole - nie zasłaniaj mi słonca. Gdy kogoś kochasz, jesteś jak stworzyciel świata - na cokolwiek spojrzysz, nabiera to kształtu, wypełnia się barwą, światłem. Powietrze przytula się do ciebie, choćby był mróz, a ty masz w sobie tyle radości, że musisz ją rozdawać wokoło, bo się w tobie nie mieści Hoc fac - tak czyń. A tergo - od tyłu; z tyłu. I czarne włosy posiwieją. Safona |
|