2014-06-07 7 views
2

J'ai une requête SQL et j'essaie de n'afficher que des enregistrements distincts comme un message de chaque ordre d'utilisateur par le dernier message desc desc. Comment faire ça? J'ai essayé le groupe par et il a échoué.Sql Requête pour afficher des enregistrements distincts

SELECT jca.id, 
ju.name, 
jca.actor, 
jca.title as title, 
jca.created as postedDate 
FROM community_activities jca 
left join users ju on jca.actor=ju.id 
left join community_users jcu on jcu.userid=ju.id 
ORDER BY jca.id, jca.postedDate DESC LIMIT 0 , 50; 


id name actor title 
200  chandra 12  hello man 
201  chandra 12  hey man 
202  shayam 13  hello hero 
203  chandra 12  hello yoyo 
204  kokila 16  yep 
205  chandra 12  hello y 
206  chandra 12  hello abc 
+2

Ces documents sont tous distincts, où voyez-vous des enregistrements de dupes? Vous pouvez utiliser le mot-clé DISTINCT après le SELECT, mais je ne vois pas de dupes en fonction de vos données d'échantillon – Sparky

+0

Cela n'a pas fonctionné – Kurkula

+0

Comme le dit @Sparky, ils sont déjà distincts. Vous avez, par exemple, différents titres pour chaque utilisateur. Si vous voulez en montrer un seul par titre, quel titre voulez-vous montrer? Le dernier? Ou juste un ...? – wwkudu

Répondre

1

Pour afficher uniquement le dernier message de chaque utilisateur, créez une table dérivée qui se compose de seulement le dernier identifiant de poste de chaque utilisateur et rejoindre community_activities à cette table , donc seuls les résultats seront affichés.

SELECT jca.id, 
ju.name, 
jca.actor, 
jca.title as title, 
jca.created as postedDate 
FROM community_activities jca 

JOIN (SELECT MAX(id) max_id 
FROM community_activities 
GROUP BY actor) t1 on t1.max_id = jca.id 

LEFT JOIN users ju on jca.actor=ju.id 
LEFT JOIN community_users jcu on jcu.userid=ju.id 
ORDER BY jca.id, jca.postedDate DESC LIMIT 0 , 50; 
+0

L'ensemble des résultats n'est pas trié Je pense que la question pourrait être à jca.postedDate DESC – Kurkula

+1

@Chandana est (auteur, créé) unique ou pourrait-il y avoir plusieurs lignes avec le même (auteur, créé)? – FuzzyTree

+0

Je suis en train de montrer un enregistrement pour un auteur – Kurkula

1
SELECT 
    MAX(jca.id),  -- just selects maximum of each column , 
    DISTINCT ju.name, -- max() may be wrong for your scenario . 
    MAX(jca.actor), 
    MAX(jca.title) as title, 
    MAX(jca.created) as postedDate 
FROM 
    community_activities jca 
left join 
    users ju on jca.actor=ju.id 
left join 
    community_users jcu on jcu.userid=ju.id 
GROUP BY 
    ju.name; 

sortie:

202  shayam 13  hello hero 

204  kokila 16  yep 

206  chandra 12  hello abc 
+0

Il jette l'erreur ci-dessous. Vous avez une erreur dans votre syntaxe SQL près de 'distinct ju.name, MAX (jca.actor), MAX (jca.title) comme titre, MAX (jca.c' à la ligne 2 – Kurkula

-1
SELECT  jca.id, 
      ju.name, 
      jca.actor, 
      jca.title AS title, 
      MAX(jca.created) AS postedDate 
FROM  community_activities jca 
LEFT JOIN users ju ON (jca.actor = ju.id) 
LEFT JOIN community_users jcu ON (jcu.userid = ju.id) 
ORDER BY jca.created DESC 
+0

La requête ci-dessus affiche seulement une dernière ligne.J'essaie d'obtenir un dernier enregistrement (ordre par créé) pour chaque utilisateur . – Kurkula

Questions connexes