2010-12-02 36 views
1

Je veux obtenir un ensemble spécifique de résultats d'une table dans une seule requête et je ne suis pas capable de trouver comment le faire.Comment puis-je obtenir pour chaque occurrence de clé primaire distincte dans une table, le premier d'un ensemble ordonné de lignes?

J'ai une table enregistrant chaque changement d'état de l'agent (en ligne, hors ligne, absent, etc.) et l'heure à laquelle cela s'est produit.

Je veux obtenir pour chaque identifiant de l'agent le dernier changement d'état, à savoir les agents considérant A et B, je serais la table d'origine contenant:

ID | ÉTAT | DATETIME

A | En ligne | 29-11-2010

A | Hors ligne | 30-11-2010

B | Loin | 28-11-2010

B | En ligne | 30-11-2010

Et je veux générer une sortie comme ceci:

ID | ÉTAT | DATETIME

A | Hors ligne | 30-11-2010

B | En ligne | Je me rends compte que cela peut être une requête de sélection vraiment basique, mais je ne peux pas mettre le doigt sur ce que je suis. Aussi des accessoires fous si elle pouvait être compatible Informix: D

Répondre

2

Que diriez-vous:

SELECT datetime, id, state FROM table t1 
WHERE t1.datetime = (SELECT MAX(t2.datetime) FROM table t2 WHERE t2.id=t1.id) 
+0

Exactement ce que j'allais répondre. @LostKaleb: Sur une autre note, je suggère d'éviter les mots-clés comme noms de colonnes. Ça me fait mal aux yeux :) – fancyPants

+0

Cela semble faire l'affaire! Merci beaucoup, j'ai été coincé ici pendant un moment et, comme je le pensais, il y avait une solution simple mais insaisissable! :RÉ – LostKaleb