2014-07-16 4 views
1

J'utilise MySQL voici ma table nommée npstablescore personne unique par mois

pk id | score | personid | date 
--------------------------------------- 
435 | 4 | 33  | 2012-01-05 
436 | 10 | 78  | 2012-01-21 
437 | 5 | 22  | 2012-05-11 
438 | 2 | 33  | 2012-01-22 
439 | 10 | 22  | 2012-05-25 
440 | 4 | 33  | 2012-02-05 

je veux obtenir un score de ces personnes qui ont pas marquer en même mois comme je veux

pk id | score | personid | date 
--------------------------------------- 
435 | 4 | 33  | 2012-01-05 
436 | 10 | 78  | 2012-01-21 
437 | 10 | 22  | 2012-05-25 
440 | 4 | 33  | 2012-02-05 

J'utilise déjà la requête avec mes autres exigences comme ceci

"select * from npstable où date_created> = '2012-01-01' AND date_created < = '2012-06-05' ET score entre 0 A ND 10; "

Toutes les idées pour faire des requêtes de sélection qui peuvent générer mon rapport requis.

+0

utilisation SELECT DISTINCT (score) et regardez ce post -> http://stackoverflow.com/questions/5967130/mysql-select-one-column-distinct-with-corresponding-other-columns – SerhatCan

+1

Duplicata de http://stackoverflow.com/questions/16979136/mysql- select-distinct-records-from-latest-dates-only – ahruss

+0

Vérifiez votre t votre sortie nécessite. Pensiez-vous que la dernière rangée est correcte? –

Répondre

0

Cette requête sélectionne le premier enregistrement par mois pour chaque personID

select t1.* 
from npstable t1 
join (
    select 
     personid, year(date) my_year, 
     month(date) my_month, min(date) min_date 
    from npstable t2 
    group by person_id, my_year, my_month 
) t2 join on year(t1.date) = t2.my_year 
      and month(t1.date) = t2.my_month 
      and t1.date = t2.min_date 
      and t1.personid = t2.personid 

une autre version qui sélectionne les lignes avec l'identifiant le plus bas par personid par mois

select t1.* 
from npstable t1 
where id in (select 
    min(id) from npstable t2 
    group by personid, month(date), year(date) 
)