2010-07-09 4 views
1

Si j'ai trois colonnes dans ma table MySQL people, dites id, nom, créé où nom est une chaîne et créé est un horodatage .. quelle est la requête appropriée pour un scénario où j'ai 10 lignes et chaque rangée a un enregistrement avec un nom. Les noms peuvent avoir un identifiant unique, mais un nom similaire n'en est pas moins. Donc, vous pouvez avoir trois Bob's, deux Mary, un Jack et 4 Phil.Requête SQL pour rechercher une ligne avec les mêmes valeurs de colonne créées récemment

Il existe également une table hobbies avec les colonnes id, hobby, person_id.

Fondamentalement, je veux une requête qui procédez comme suit:

Retour toutes les personnes avec zéro passe-temps, mais seulement la dernière sélectionnons par personne distincte créée, si cela fait sens. Ce qui veut dire s'il y a une personne de Bob qui a été créée hier, et une personne créée aujourd'hui. Je veux seulement savoir si le Bob créé aujourd'hui n'a aucun hobby. Celui d'hier n'est plus pertinent.

Répondre

3
select pp.id 
from people pp, (select name, max(created) from people group by name) p 
where pp.name = p.name 
and pp.created = p.created 
and id not in (select person_id from hobbies) 
0

Essayez ceci:

Select * 
    From people p 
    Where timeStamp = 
     (Select Max(timestamp) 
      From people 
      Where name = p.Name 
      And not exists 
       (Select * From hobbies 
        Where person_id = p.id)) 
2
SELECT latest_person.* FROM (
    SELECT p1.* FROM people p1 
    WHERE NOT EXISTS (
    SELECT * FROM people p2 
    WHERE p1.name = p2.name AND p1.created < p2.created 
) 
) AS latest_person 
LEFT OUTER JOIN hobbies h ON h.person_id = latest_person.id 
WHERE h.id IS NULL; 
Questions connexes