ugrás a tartalomhoz

Utolsó dátumhoz tartozó értékek

tiku I tikaszvince · 2006. Feb. 7. (K), 10.02
Sziasztok!
Mindig utána járok ha valami problémám van, de most sajnos sem időm sem energiám.... ezért a segítségeteket kérem.
Van egy táblám, ahol mért sebességeket tárolok
  1. CREATE TABLE  sl_speedlog (  
  2.   log_id int(10) unsigned NOT NULL auto_increment,  
  3.   elofizeto varchar(250) NOT NULL default '',  
  4.   email varchar(250) NOT NULL default '',  
  5.   csomag varchar(10) NOT NULL default '',  
  6.   mert float NOT NULL default '0',  
  7.   datum datetime NOT NULL default '0000-00-00 00:00:00',  
  8.   PRIMARY KEY  (`log_id`)  
  9. );  
Szeretnék egy olyan lekérdezést összerakni, ahol az egyes csomaghoz tartozó utolsó napon rögzített sebességek átlagát kapom meg. tehát valami ilyesmit:
+--------+--------+------------+
| csomag |  mert  |   datum    |
+--------+--------+------------+
| m1024  | 161.50 | 2006-02-07 |
| m192   | 52.20  | 2006-02-06 |

Eddig ezzel próbálkoztam
  1. SELECT csomag, ROUND(AVG(mert), 2) AS mert, DATE(MAX(datum)) AS datum   
  2. FROM sl_speedlog  
  3. GROUP BY date(datum), csomag  
Ezzel csak az a baj, hogy minden nap, minden csomag átlagát kiírja.
A segítségeteket előre is köszönöm.

TikuVoltam
 
1

belső select

Anonymous · 2006. Feb. 7. (K), 13.30
a FROM sl_speedlog helyett írj egy belső selectet amiben kiválogatod az utolsó naphoz tartozó sorokat.

...from (select ... from speedlog where date=mai nap) group...

gex
2

nem egészen

tiku I tikaszvince · 2006. Feb. 7. (K), 16.05
Nem egészen erre gondoltam. Nekem minden csomaghoz kellene annak a napnak az átlaga, amelyiken utoljára volt bejegyzés. (ettől érthetőbben sajnos nem tudom megfogalmazni :)) a tied viszont mindig az adott napi átlagot adná ki, ahhoz viszont szerintem nem kell a subselect...

Közben a kevés ráérő időmben arra jutottam, hogy a HAVING környékén kellen nézelődnöm, vagy az én eredeti lekérdezésemet kellene betenni egy belső SELECTbe.

Hozzáfűzés:
Ez a ronda kb azt csinálja ami nekem kell:
  1. SELECT a.csomag, ROUND(AVG(mert), 2) AS mert, DATE(MAX(a.datum)) AS datum  
  2. FROM sl_speedlog LEFT JOIN   
  3.   (SELECT csomag, MAX(DATE(datum)) AS datum FROM sl_speedlog GROUP BY csomag) AS a   
  4.   ON a.csomag = sl_speedlog.csomag  
  5. GROUP BY date(a.datum), csomag  
Kérdésem:
Elképzelhető szebb/elegánsabb megoldás a problémámra?

TikuVoltam
Ma is holnap fekszünk le, mint tegnap