Tout,
Je suis sûr que c'est une jolie question de requête SQL simple, mais je suis sûr qu'il y a un bon moyen et une très mauvaise façon, de faire cela. Gauche à mes propres appareils, je suis susceptible de finir avec ce dernier. Donc ... p>
J'ai une table dans l'accès avec des données qui ressemblent à ceci: p> Ce que je voudrais obtenir est la "valeur "Pour chaque identifiant unique avec la date la plus récente" à partir de "(qui est au format yyyyymm). p> Donc, mon ensemble de résultats devrait ressembler à ceci: P> ID Value As_of
1173 156 20090601
127 209 20090301
1271 166 20090201
5 Réponses :
Vous ne savez pas quelle plate-forme vous cherchez à faire cela, mais dans T-SQL, vous pouvez procéder comme suit:
SELECT t.* FROM ( SELECT ID, MAX(As_Of) as r1 FROM myTable GROUP BY ID ) as dt INNER JOIN myTable t ON dt.ID = t.ID and dt.r1 = t.As_Of
Désolé, je vois que vous avez dit que l'accès était le dB. Cela devrait toujours fonctionner pour vous, j'espère!
Je crois que vous vouliez grouper de valeur et d'identité car il demande la valeur par ID pour la date maximale.
-1 Cela n'a même pas l'identifiant de référence, il ne remplira donc pas le besoin. Il pourrait être imbriqué dans une autre requête et travailler tout droit ...
Je meurs pour comprendre pourquoi au moins deux personnes ont évoqué cette réponse?
Funka, merci pour votre réponse. Cependant, ce n'est pas tout à fait ce que je cherche. J'essaie d'identifier la valeur avec la date maximale "AS_OF" pour chaque identifiant unique dans ma table. Mes excuses si mon message original n'était pas clair.
Ceci est simplement un cas de moi ne lisant pas complètement la question. Je semble avoir supposé ID code> était une colonne auto-numérique ou d'identité. Vous êtes tous corrects que cela est incorrect! Le groupe par le groupe serait sur la colonne code> id code>, et vous pouvez l'utiliser dans une table interne ou une table dérivée pour rejoindre la valeur. Je voudrais éditer ma réponse mais on dirait qu'il y a déjà quelque chose correct sur cette page. Désolé pour la confusion!
Je pense que ce que vous cherchez est ceci: p>
Sélectionnez l'ID, la valeur, AS_OF de TABLE_NAME où as_of = max (as_of) groupe par ID P>
Ceci dit pour chaque identifiant, trouvez le max as_of et obtenez cette valeur. P>
Ceci est Générique SQL. Je ne suis pas sûr de l'accès. Je suis sûr que si cela ne fonctionne pas, il y a quelque chose de similaire. P>
bonne chance! Joe p>
@funka, qui ne fonctionnera pas si vous avez des valeurs de "valeur" en double pour différents identifiants - qui vous donneront essentiellement une liste groupée par "valeur", pas par ID ...
@Joe Fair, agrégats Aren 't permis dans les clauses sans sous-requête / ayant un combo également, du moins pas dans ANSI ... P>
Cela vous donnera la liste, mais donnera des doubles duplicates si vous avez plusieurs rangées avec le Même ID / AS_OF Valeurs: P>
select distinct t1.id, t1.value, t1.As_of from tableName t1 join ( select id as id, max(As_of) as max_as_of from tableName group by id ) t2 on t1.id = t2.id and t1.As_of = t2.max_as_of
Eh bien, ils sont tous deux corect! Mais où est le distinct? :-)
Chadhoc - Je voulais juste vous remercier pour cette réponse - cela fonctionne parfaitement. Je vous aurais crédité de la "réponse acceptée", sauf que j'avais déjà donné cela à la poste de Radu. Je ne sais pas ce que le protocole est pour cela - les deux réponses étaient également utiles et correctes. Et la peine a été soumise en même temps.
Si vous avez besoin de la date et de la valeur, vous devez faire une jointure:
SELECT ID, Value,As_of from yourTable a inner join (SELECT ID, MAX(As_of) as As_of from yourTable group by ID) b on a.ID=b.ID and a.As_of = b.As_of
RADU - Je voulais juste vous remercier pour cette réponse - fonctionne parfaitement et environ 99,99% plus rapide que l'original "Select Max" J'ai essayé. Bravo, Matt
Essayez quelque chose comme ça
SELECT t1.* FROM (SELECT Table1.ID, Max(Table1.As_Of) AS MaxOfAs_Of FROM Table1 GROUP BY Table1.ID ) AS MaxIDS INNER JOIN Table1 t1 ON MaxIDS.ID = t1.ID and MaxIDS.MaxOfAs_Of = t1.As_Of