« Groupe par » est ce que vous avez besoin. Il suffit de faire « groupe par ParentActivityID » et dire que l'horodatage le plus récent sur toutes les lignes avec la même ParentActivityID est nécessaire pour vous:
SELECT ParentActivityID, MAX(Timestamp) FROM Table GROUP BY ParentActivityID
« Groupe par » l'opérateur est comme prendre des lignes d'une table et de les mettre dans une carte avec une clé définie dans la clause group by (ParentActivityID dans cet exemple). Vous devez définir comment le groupement va gérer les lignes avec des clés en double. Pour cela, vous avez diverses fonctions d'agrégat que vous spécifiez sur les colonnes que vous voulez sélectionner mais qui ne font pas partie de la clé (non répertoriées dans la clause group by, considérez-les comme des valeurs dans une carte).
Certaines bases de données (comme mysql) vous permettent également de sélectionner des colonnes qui ne font pas partie de la clause group by (pas dans une clé) sans leur appliquer une fonction d'agrégat. Dans ce cas, vous obtiendrez une valeur aléatoire pour cette colonne (cela revient à écraser aveuglément la valeur dans une carte avec une nouvelle valeur à chaque fois). Pourtant, la norme SQL avec la plupart des bases de données ne vous permettra pas de le faire. Dans ce cas, vous pouvez utiliser la fonction d'agrégation min()
, max()
, first()
ou last()
pour la contourner.
Merci pour la réponse. En fait, je veux seulement un ParentActivityID. Votre solution donnera chaque paire de ParentActivityID et Timestamp. Pour e.g, si j'ai [1, T1], [2, T2], [1, T3], alors je voulais que la valeur soit [1, T3] et [2, T2]. – Varun