Mysql query vprašanje...

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?

1

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.

Ti mogoče kaj koristi funkcija GROUP_CONCAT()?

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.

rabis embeded SQL stavke

SELECT A.id, A.date, A.name, (SELECT COUNT(*) FROM xy WHERE id=A.id) cnt FROM xy A ORDER BY A.date DESC LIMIT 0,3