2010-10-05 6 views
0

Je voudrais interroger une liste de discussions, avec chacune des conversations montrant le dernier message max(date), et un compte du nombre de messages dans la conversation count(*), group by threadID.Question SQL pour l'affichage des messages électroniques

Voici la table SQL

Message 
------------- 
messageID (int) 
subject (varchar) 
... 
date (date) 
threadID (guid) 

Comment produire ce qui suit dans une seule requête? dans une vue de fil comme dans Gmail?

Ou la structure de données est incorrecte? Peut-être que je devrais dénormaliser les données requises à une table Thread? Utiliser le déclencheur pour mettre à jour le dernier ID de message et compter?

Merci!

mise à jour Je dois aussi le sujet de la « max ([date]) », et commander le fil à la date du dernier message, merci!

Répondre

3

En supposant threadID est un lien unique pour une conversation, à moins que je me manque quelque chose, cela devrait fonctionner:

SELECT threadID, count(messageID) as MessageCount, max([date]) as MaxDate 
FROM Message 
GROUP BY threadID 

Vous pouvez également modifier le nom de la colonne date, puisque c'est un mot réservé.

EDIT pour les besoins changent

Puisque vous n'avez pas spécifié si l'objet de l'e-mail peut changer ("Hey" dans le premier e-mail peut être "RE: Hey" dans le second pour une réponse), j'ai fait une sous-requête afin que vous puissiez tirer toutes les informations de la table Message (M1) que vous voulez.

SELECT M1.subject, M1.date, M2.MessageCount 
FROM 
Message M1 
INNER JOIN (
    SELECT threadID, count(messageID) as MessageCount, 
     max([date]) as MaxDate, max(messageID) as MaxMessageID 
    FROM [Message] 
    GROUP BY threadID 
) M2 ON 
M1.threadID = M2.threadID and M1.MessageID = M2.MaxMessageID 
ORDER BY M1.[date] DESC 
+0

thx, J'ai aussi besoin de l'objet du 'max ([date])', comment le faire? merci ... – Henry

+0

oh, et commandez le fil par la date du dernier message ... désolé n'a pas demandé le Q assez clair. – Henry

+0

@Henry - Vous devriez vraiment mettre à jour votre question avec les exigences. En tout cas, j'ai mis à jour ma réponse. – LittleBobbyTables

Questions connexes