[MySQL] Zapytanie i problem z group by
Sarenka - 10-09-2006 00:14
[MySQL] Zapytanie i problem z group by
Mam zapytanie, ktore z bazy danych wyciaga wyniki ostatnich pomiarow dostarczonych przez stacje pomiarowa - uzywa releacji do dwoch tabel:
SELECT `punkty pomiarowe`.ID as pID, `punkty pomiarowe`.nazwa as pnazwa, `punkty pomiarowe`.opis as popis, `pomiary statystyczne`.LAFmin, `pomiary statystyczne`.LAeq, `pomiary statystyczne`.LAFMax, `pomiary statystyczne`.czas as pomczas, `rodzaj_terenu`.NazwaGrupy_pl as Teren, `rodzaj_terenu`.WartProgowa as wp FROM `pomiary statystyczne` INNER JOIN `punkty pomiarowe` ON `punkty pomiarowe`.ID = `pomiary statystyczne`.`punkt pomiarowy` INNER JOIN `rodzaj_terenu` ON `punkty pomiarowe`.IDRodzaju = `rodzaj_terenu`.IDRodzaju WHERE `punkty pomiarowe`.miasto = 7 GROUP BY pnazwa ORDER BY LAFMax desc
Wynik z tego taki, ze mam trzy wiersze - po jednym dla kazdego z punktow pomiarowych. Jak zrobic, by bylo to po jednym wierszu dla ostatniego pomiaru? W tej chwili wywala mi daty te, ktore CHYBA byly dodawane jako pierwsze do bazy (nie wiem tego niestety na pewno -czesc danych testowych dostalem juz w bazie i daty te sa jednymi z "zastanych" i nie bardzo chce na nowo generowac 10tys rekordow) Same pomiary trzymane sa w tabeli pomiary statystyczne - reszta to opis punktu pomiarowego Mam nadzieje, ze ktos z Was cos z tego zrozumie i bedzie w stanie pomoc... Aha - baza MySQL 4 a czas podawany jako DATETIME. Data ostatniego pomiaru moze sie bardzo roznic - nwet w latach (np. stacje wylaczone ze zbierania pomiarow ale ktorych dane nadal maja sie wyswietlac itp.)
PS. Zanim ktos zacznie krzyczec nt. nazewnictwa tabel itp - to nie moja baza - ja mam tylko interfejs www zrobic.
-- Sarenka (ale facet) I tak i nie wiem czego chce :)
sd - 10-09-2006 00:14
Sarenka napisał(a):
> Wynik z tego taki, ze mam trzy wiersze - po jednym dla kazdego z punktow > pomiarowych. > Jak zrobic, by bylo to po jednym wierszu dla ostatniego pomiaru? W tej > chwili wywala mi daty te, ktore CHYBA byly dodawane jako pierwsze do > bazy (nie wiem tego niestety na pewno -czesc danych testowych dostalem
chyba masz taki sam problem jak ja (patrz 3 posty wyzej) mam nadzieje ze ty to lepiej wytlumaczylas i ktos udzieli odpowiedzi:)
pozdrawiam
sd - 10-09-2006 00:15
hejka
jesli jeszcze nie znalazlas odpowiedzi to ci podpowiem, bo ja znalazlem napisalem zapytanie na podstawie mojej bazy
SELECT * FROM zesp_news AS z WHERE (SELECT max(news_id) FROM zesp_news AS n WHERE n.zesp_id = z.zesp_id) GROUP BY z.zesp_id ORDER BY z.data_dodania
sd - 10-09-2006 00:15
sd napisał(a): > SELECT * > FROM zesp_news AS z > WHERE > (SELECT max(news_id) > FROM zesp_news AS n > WHERE n.zesp_id = z.zesp_id) > GROUP BY z.zesp_id > ORDER BY z.data_dodania
hmmm, chyba jednak zle to napisalme:( to czekamy nadal na propozycje :) ale cos z tym MAX bedzie
sd - 10-09-2006 00:15
witam
juz wiem o co chodzi w jednym podzapytaniu pobierasz ID tego ostatniego pomiaru w glownym zapytaniu robisz warunek WHERE id IN (tutaj to podzapytanie)
Sarenka - 10-09-2006 00:15
sd napisał(a): > witam > > juz wiem o co chodzi > w jednym podzapytaniu pobierasz ID tego ostatniego pomiaru > w glownym zapytaniu robisz warunek > WHERE id IN (tutaj to podzapytanie) > Udalo mi sie to zrobic tak: SELECT `punkty pomiarowe`.ID AS pID, `punkty pomiarowe`.nazwa AS pnazwa, `punkty pomiarowe`.opis AS popis, psa.LAFmin, psa.LAeq, psa.LAFMax, psa.czas AS pomczas, `rodzaj_terenu`.NazwaGrupy_pl AS Teren, `rodzaj_terenu`.WartProgowa AS wp FROM `pomiary statystyczne` AS psa INNER JOIN `punkty pomiarowe` ON `punkty pomiarowe`.ID = psa.`punkt pomiarowy` INNER JOIN `rodzaj_terenu` ON `punkty pomiarowe`.IDRodzaju = `rodzaj_terenu`.IDRodzaju WHERE `punkty pomiarowe`.miasto = 7 AND psa.czas IN (
SELECT MAX( psb.czas ) FROM `pomiary statystyczne` AS psb WHERE psb.`punkt pomiarowy` = psa.`punkt pomiarowy` ) ORDER BY pnazwa
Ino rozwiazanie nei do przyjecia, bo ise 58sek wykonuje na Bartonie 2.8 :/
-- Sarenka (ale facet) I tak i nie wiem czego chce :)
sarenka@kastor.ds.pg.gda.pl - 10-09-2006 00:15
<<<ciach>>>
Na Gentto na tym samym sprzecie 36 - 38sek :/ Tak samo dlugo trwa dla zapytania, ktore zwraca Empty set i jakies tam wyniki. Domyslam sie, ze chodzi o to, iz najpierw wyciaga sie wszystko z tabeli a potem na tym dziala, wiec mam pytanie - jak to przyspieszyc?
-- Sarenka (ale facet)
zanotowane.pldoc.pisz.plpdf.pisz.pleffulla.pev.pl
|
[mysql] =?ISO-8859-2?Q?Za=E6mienie=2E=2E=2E_jak_wy=B6wietli=E6?==?ISO-8859-2?Q?=2E=2E=2E?=
[mysql] =?ISO-8859-2?Q?wielko=B6=E6_bazy_a_stabilno=B6=E6=2C?==?ISO-8859-2?Q?_podzia=B3_du=BFej_bazy_a_powi=B1zania_tabel?=
[MySQL] =?ISO-8859-2?Q?Wy=B6wietlenie_kolejnej_pozycji=2C_?==?ISO-8859-2?Q?jak=B1_mia=B3by_dany_rekord=2C_gdybym_czyta=B3 _?==?ISO-8859-2?Q?wg_konkretnych_kryteri=F3w=2E_Da_si=EA_=3F?=
[mysql 4.0.x] przenoszenie kolum =?ISO-8859-2?Q?mi=EAdzy_bazam?==?ISO-8859-2?Q?i_cd_=2E=2E=2E_?=
[MySQL] =?ISO-8859-2?Q?z=B3=B1czenie_tabeli_u=BFytkownik_i?==?ISO-8859-2?Q?_zdj=EAcia_z_wyborem_zdj=EAcia_domy=B6lnego?=
[MySQL] Jak =?ISO-8859-2?Q?wpisa=E6_do_tabeli_pozycje_dl?==?ISO-8859-2?Q?a_wierszy_gdybym_te_wiersze_wybiera=B3_w_ok?== ?ISO-8859-2?Q?re=B6lonej_kolejno=B6ci_=3F?=
Gdzie MySQL 4.1, a gdzie 5.0?
[MySQL 4.0...4.1] zabezpieczenie przed =?ISO-8859-2?Q?jednoczesn?==?ISO-8859-2?Q?=B1_edycj=B1?=
[MS SQL] "set names" (mySQL) w MS SQL
MySQL - jak =?ISO-8859-2?Q?wyeksportowa=E6_zawarto=B6=E6_wie?==?ISO-8859-2?Q?lkiej_tabeli?=
zanotowane.pldoc.pisz.plpdf.pisz.plwawa19wwa91.pev.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 |
|