2015-08-06 1 views
0

J'ai 2 tables, Posts et Replies. Ils contiennent tous deux le PostID et un TimeStamp lorsque les données ont été insérées.MySQL Get TimeStamp max et la clé associée

Dans une seule requête, j'aimerais savoir, l'entrée la plus récente, sur les deux tables, et le PostID associé pour cette entrée.

Je sais dans MSSQL que je peux le faire avec des sous-requêtes, comme ci-dessous; Cela fait maintenant 20 minutes que j'y vais depuis 20 minutes - et je sais que c'est une solution simple.

Pour clarifier, PostID est un PK de Posts et PostID est un FK de Replies. Je veux savoir, l'activité la plus récente sur tous PostID, dans l'ordre décroissant de TimeStamp

Répondre

1

Que pensez-vous de cela?

SELECT 
    , Posts.PostID 
    , Posts.TimeStamp as LatestPost 
    , Replies.TimeStamp as LatestReply 
    , COALESCE(Replies.TimeStamp, Posts.TimeStamp) as LastActivity 
FROM 
    Posts 
LEFT OUTER JOIN 
    Replies 
     ON 
    Replies.PostID = Posts.PostID 
WHERE 
    Posts.TimeStamp = 
     (SELECT MAX(TimeStamp) 
     From Posts sub 
     WHERE sub.PostID = Posts.PostID) 
    AND 
    (Replies.TimeStamp is NULL 
    OR Replies.TimeStamp = 
     (SELECT MAX(TimeStamp) 
     FROM Replies sub 
     WHERE sub.PostID = Posts.PostID 
     ) 
    ) 
ORDER BY 4 DESC 
+0

Bonjour dennis, Cela renvoie encore plusieurs résultats pour un seul 'PostID'. – oliversarfas

+0

Salut, @oliversarfas: J'ai ajouté une clause NOT NULL à ce qui précède, mais vous ne devriez pas en avoir besoin .. Elle devrait renvoyer exactement deux résultats, en supposant que TimeStamp unique dans chaque table. Un pour les postes et un pour les réponses. (C'est-à-dire, à moins que les messages ou les réponses ne soient vides). Si TimeStamp n'est pas unique, nous avons besoin de plus d'informations pour savoir lequel est le plus récent. – Dennis

+0

Great @Dennis, merci beaucoup! – oliversarfas