ďťż
 
pytanko z instrukcje MYSQL ďťż
 
pytanko z instrukcje MYSQL
Zobacz wiadomości
 
Cytat
A gdyby tak się wedrzeć na umysłów górę, / Gdyby stanąć na ludzkich myśli piramidzie, / I przebić czołem przesądów chmurę, / I być najwyższą myślą wcieloną. . . Juliusz Słowacki, Kordian
Indeks BCB i MySQL subiekt gt fototapeta
 
  Witamy

pytanko z instrukcje MYSQL



Rafal - 06-05-2006 00:07
pytanko z instrukcje MYSQL
  mam dla przykladu maly wycinek danych z bazy:

+--------+---------------------+-------------+
| symbol | data | czynnosc |
+--------+---------------------+-------------+
| PZ254 | 2006-05-05 07:21:31 | Rozpoczecie |
| PZ254 | 2006-05-05 08:03:26 | Zakonczenie |
| PZ254 | 2006-05-05 08:03:54 | Rozpoczecie |
| PZ254 | 2006-05-05 08:23:54 | Przerwanie |
| PZ250B | 2006-05-05 09:07:32 | Rozpoczecie |
| PZ250B | 2006-05-05 09:43:31 | Przerwanie |
+--------+---------------------+-------------+

chciabym wyselekcjonowac ostatnia czynnosc dla danego symbolu
probowalem np. tak:
SELECT symbol,max(data),max(czynnosc) FROM praca GROUP BY symbol;
efekt jest nieprawidlowy:
+--------+---------------------+---------------+
| symbol | max(data) | max(czynnosc) |
+--------+---------------------+---------------+
| PZ250B | 2006-05-05 09:43:31 | Rozpoczecie |
| PZ254 | 2006-05-05 08:23:54 | Zakonczenie |
+--------+---------------------+---------------+

prosze o pomoc jak skonstruowac instrukcje SELECT
aby pojawiala sie czynnosc, ta na prawo od daty

------------------------------------------
jest mi to potrzebne do optymalizacji,
bo na razie zrobilem selecje posrednio przez tablice tymczasowe,
ale danych jest tak duzo ze oblicza mi sie to kilka minut,
i chcialbym wszystko upchnac w jednej instrukcji





gonzak@op.pl - 06-05-2006 00:07

  >chciabym wyselekcjonowac ostatnia czynnosc dla danego symbolu
>probowalem np. tak:
>SELECT symbol,max(data),max(czynnosc) FROM praca GROUP BY symbol;
>efekt jest nieprawidlowy:

moze cos w rodzaju takiego
select * from (select * from praca where <np symbol=xxxx> order by data desc) as t group by symbol

tyle ze to subquery dla mysql>4.0

pozdr
Rafal
8sxat)
--
Archiwum grupy: http://niusy.onet.pl/pl.comp.bazy-danych




Rafal - 06-05-2006 00:07

  chyba nie o to chodzi
musialbym wtedy dla kazdego symbolu wykonac osobna instrukcje SELECT
a to przedluza obliczenia :((((

chce w jednej instrukcji
wyselekcjonowac wiersze z ostatnia czynnoscia dla kazdego symbolu

jest mnostwo symboli
i dla kazdego symbolu powienien sie pokazac
jeden wiersz z ostatnia data i czynnoscia

moze inne pomysly ?

mam MySQL wersja 4.14




Grzegorz Danowski - 06-05-2006 00:07

  Użytkownik "Rafal" <rcU5UN4O@pulsarsc.com.pl> napisał w wiadomości
news:e3f2hj$i1s$1@nemesis.news.tpi.pl...
> mam dla przykladu maly wycinek danych z bazy:
>
> +--------+---------------------+-------------+
> | symbol | data | czynnosc |
> +--------+---------------------+-------------+
> | PZ254 | 2006-05-05 07:21:31 | Rozpoczecie |
> | PZ254 | 2006-05-05 08:03:26 | Zakonczenie |
> | PZ254 | 2006-05-05 08:03:54 | Rozpoczecie |
> | PZ254 | 2006-05-05 08:23:54 | Przerwanie |
> | PZ250B | 2006-05-05 09:07:32 | Rozpoczecie |
> | PZ250B | 2006-05-05 09:43:31 | Przerwanie |
> +--------+---------------------+-------------+
>
> chciabym wyselekcjonowac ostatnia czynnosc dla danego symbolu

Spróbuj tak:

Select
*
From
praca As P
Where
Exists(
Select
* -- jeśli nie będzie działać, to zmień * na 1
From
praca As M
Where
M.symbol = P.symbol
Having
Max(M.data) = P.data)

Pozdrawiam
Grzegorz





Rafal - 06-05-2006 00:07

  wielkie dzieki
sposob w jaki to skonstruowales natchnal mnie nowymi pomyslami
i juz kombinuje nowy algorytm

pozdrawiam




Rafal - 06-05-2006 00:07

  cienko to wiedze,
zrobilem tym sposobem analize dla jednego zlecenia produkcyjnego
i pod wynikiem wypisal sie czas:
"5 rows in set (25.55 sec)"

zlecen mam juz ze 2 tysiace od poczatku roku

algorytm ten dziala chyba tak ze dla kazdego wiersza nadrzednej funkcji
uruchamia podfunkcję (podselekt) i sprawdza warunki

jest jakas szybsza metoda ?




Grzegorz Danowski - 06-05-2006 00:07

  Użytkownik "Rafal" <rcU5UN4O@pulsarsc.com.pl> napisał w wiadomości
news:e3fdsr$q53$1@nemesis.news.tpi.pl...
> cienko to wiedze,
> zrobilem tym sposobem analize dla jednego zlecenia produkcyjnego
> i pod wynikiem wypisal sie czas:
> "5 rows in set (25.55 sec)"
>
> zlecen mam juz ze 2 tysiace od poczatku roku
>
> algorytm ten dziala chyba tak ze dla kazdego wiersza nadrzednej funkcji
> uruchamia podfunkcję (podselekt) i sprawdza warunki
>
> jest jakas szybsza metoda ?

Na SQL Serverze działa spoko, skoro działa wolno to spróbuj inaczej:

Select
*
From
praca As P
Inner Join
(Select
symbol,
Max(Data) As MaxData
From
praca
Group By
symbol) As M
On
M.MaxData = P.data

Pozdrawiam
Grzegorz




Grzegorz Danowski - 06-05-2006 00:07

 
Użytkownik "Grzegorz Danowski" <gdn__na@serwerze__poczta.onet.pl> napisał w
wiadomości news:e3fe33$si8$1@inews.gazeta.pl...
> Użytkownik "Rafal" <rcU5UN4O@pulsarsc.com.pl> napisał w wiadomości
> news:e3fdsr$q53$1@nemesis.news.tpi.pl...
>> cienko to wiedze,
>> zrobilem tym sposobem analize dla jednego zlecenia produkcyjnego
>> i pod wynikiem wypisal sie czas:
>> "5 rows in set (25.55 sec)"
>>
>> zlecen mam juz ze 2 tysiace od poczatku roku
>>
>> algorytm ten dziala chyba tak ze dla kazdego wiersza nadrzednej funkcji
>> uruchamia podfunkcję (podselekt) i sprawdza warunki
>>
>> jest jakas szybsza metoda ?
>
> Na SQL Serverze działa spoko, skoro działa wolno to spróbuj inaczej:
>
> Select
> *
> From
> praca As P
> Inner Join
> (Select
> symbol,
> Max(Data) As MaxData
> From
> praca
> Group By
> symbol) As M
> On
> M.MaxData = P.data

Poprawka:

....
On
M.symbol = P.symbol
And
M.MaxData = P.data

G.




Tygrys - 06-05-2006 00:07

  Użytkownik "Rafal" <rcU5UN4O@pulsarsc.com.pl> napisał w wiadomości
news:e3fdsr$q53$1@nemesis.news.tpi.pl...
> cienko to wiedze,
> zrobilem tym sposobem analize dla jednego zlecenia produkcyjnego
> i pod wynikiem wypisal sie czas:
> "5 rows in set (25.55 sec)"
>
> zlecen mam juz ze 2 tysiace od poczatku roku
>
> algorytm ten dziala chyba tak ze dla kazdego wiersza nadrzednej funkcji
> uruchamia podfunkcję (podselekt) i sprawdza warunki
>
> jest jakas szybsza metoda ?

Chyba nie, bo dla każdego symbolu musisz obliczyć max datę (1) a potem
wyświetlić dla niego dane (2)

Coś jak:
SELECT P1.symbol, P1.data, P1.czynnosc FROM praca P1
WHERE P1.data = (SELECT max(Data) FROM praca P2
WHERE P1.symbol = P2.symbol)

Powinno być w miarę szybkie.

Pozdrawiam,
Tygrys
  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • effulla.pev.pl
  • comp
    [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 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?=
  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • chinska-zupka.opx.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

    Valid HTML 4.01 Transitional

    Free website template provided by freeweblooks.com