Mysql query vprašanje...
3 naročniki
3 naročniki
Imam primer
id date name
2 12.1.2000 miha
2 16.1.2000 tine
2 17.1.2000 polde
2 19.1.2000 mojca
3 24.3.2001 ana
4 24.5.2001 ana
4 26.3.2001 mojca
Rad bi dobil zadnje zapise ter njihov seštevek torej da query izpiše
2 19.1.2000 mojca 4
3 24.3.2001 ana 1
4 26.3.2001 mojca 2
Če zapišem
SELECT id, date, name, COUNT(*) FROM xy GROUP BY id
mi bo vrnilo seštevke in PRVE zapise posamezne grupe. Jaz bi pa rabil zadnje (datumsko). Kako to naredim?
6 odgovorov
Ko uporabljaš group by, v selectu ne smejo bit polja, ki so v posamezni skupini med zapisi drugačna.
Tebi bi verjetno delovala tale rešitev: SELECT MAX(date), COUNT(*) FROM xy GROUP BY id
Mimogrede, zakaj "kršiš" (ne)napisano pravilo, ki pravi, da mora bit primary key (id) unikaten?
Za datum sem ugotovil, da bi lahko uporabil MAX() samo ni mi jasno, kako bi pa vključil name?
SELECT id, MAX(date), name, COUNT(*) FROM xy GROUP BY id
schtr4jh: malo pred mano si odgovoril. Tabela seveda ni takšna kot je zgoraj zapisano. Tko sem napisal samo, da je čim enostavneje in pregledno za iskanje rešitve. Verjetno bom potem res poskusil s MAX() za ostale podatke pa verjetno več queryjev. Optimizacija / hitrost itak ni važna, ker bom query poganjal samo na localhost in ne online.
Ne vem. Nimam časa brati. Sem pa problem rešil tako, da sem naredil zanko in updejtal z vsemi vnosi... "ustavi" se pa pač pri zadnjem. Verjetno grozna rešitev, če bi bila stran online vendar, ker samo prestavljam ene vnose iz enega sistema v drugega in delam na localhost, povsem spremenljiva. Naenkrat je pognal 30.000+ querjiev vendar je bilo končano v par sekundah tko da fajn. Vseeno hvala.