Comandați în interiorul Grupului prin declarația Mysql

Am un tabel cu următoarea structură ...

--------------------------------
id | state_abbr | poll_date
1       GA         2010-01-01
2       GA         2011-01-01
3       NC         2011-02-01
-------------------------------

Am nevoie de o interogare care va aduce înapoi cel mai recent poll_date pentru fiecare stat. Folosesc grupul, dar nu pot afla cum să ordonați în cadrul acestuia să aducă înapoi cel mai recent poll_date. Pur și simplu aduce înapoi primul poll_date pentru fiecare stat. Deci, GA ar fi 2010-01-01 și NC ar fi 2011-02-01, iar ordinul ar ordona apoi aceste valori. Ce pot face pentru a obține acest lucru?

2
Aici este interogarea ..... dar vreau întregul rând, nu doar data maximă poll_date. SELECT state_abbr, MAX (poll_date) ca poll_date FROM 2012_early_polls e GROUP BY state_abbr
adăugat autor Brian, sursa
Dacă aveți nevoie doar de data sondajului, o puteți obține cu SELECT state_abbr, MAX (poll_date) FROM state GROUP BY state_abbr . Dacă aveți nevoie de întregul rând, consultați această întrebare: stackoverflow.com/questions/121387/…
adăugat autor Sam Dufel, sursa

2 răspunsuri

Ce zici

SELECT id, state_abr, poll_date FROM  t INNER JOIN (SELECT MAX(poll_date) max_date, id, state_abbr FROM  GROUP BY state_abr) p ON t.state_abbr = p.state_abbr && t.poll_date = p.max_date;

Deoarece nu puteți grupa mai mult de 1 lucru, în acest fel efectuați grupul, colectați data maximă agregată și apoi utilizați aceste date pentru a selecta rândul (urile) corespunzător final.

Modificați: eliminat DISTINCT ROW creier lapse, îmi pare rău, ceea ce am pentru a fi sus atât de târziu. :)

1
adăugat

Mysql kung fu la salvare:

select * from
(select * from polls order by state_abr, poll_date desc) x
group by state_abr

Atât mental cât pare, și chiar dacă nu este chiar valid SQL în alte baze de date, acest lucru funcționează.

mysql are o funcționalitate specială prin care permite gruparea by fără agregarea grupului non-coloană, în care caz returnează rândul prima grup.

Dacă selectați dintr-o interogare internă care ordonează rândurile astfel încât rândul dorit din fiecare grup să fie primul, pur și simplu adăugați un grup în coloana respectivă.

0
adăugat
MySQL - comunitatea Română
MySQL - comunitatea Română
19 participanți

Comunitatea română a programatorilor MySQL.