2013-08-20 7 views
2

J'ai une base de données d'accès qui, je le sais bien, est assez mal conçue, malheureusement c'est ce que je dois utiliser. Il ressemble un peu à ce qui suit:SQL Get n dernières entrées uniques par date

(Row # est pas une colonne dans la base de données, il est juste là pour me aider à décrire ce que je suis après)

Row# ID  Date  Misc 
1  001 01/8/2013  A 
2  001 01/8/2013  B 
3  001 01/8/2013  C 
4  002 02/8/2013  D 
5  002 02/8/2013  A 
6  003 04/8/2013  B 
7  003 04/8/2013  D 
8  003 04/8/2013  D 

Ce que je suis en train de faire est d'obtenir toutes les informations saisies pour la dernière n (par date) "entrées" où une "entrée" est toutes les lignes avec un identifiant unique.

Donc, si je veux la dernière entrée 1 je vais obtenir les lignes 6, 7 et 8. Les deux dernières entrées me obtenir des lignes 4-8 etc.

J'ai essayé d'obtenir le SN est nécessaire dans un Sous-sélectionner, puis sélectionner toutes les entrées où ces SN apparaissent, mais je ne pouvais pas le faire fonctionner. Toute aide appréciée.

Merci.

Répondre

1

La syntaxe d'accès:

select * 
from t 
where ID in (select top 10 ID 
      from t 
      group by ID 
      order by max([date]) desc 
      ) 
+0

Merci pour cela. Je fais des progrès, mais cela m'a quand même donné des données incertaines. Savez-vous pourquoi lorsque je lance la sous-requête pour le TOP 1, je récupère 8 valeurs d'ID? – KorbenDallas

+0

Je l'ai compris. Il semble que deux valeurs de 001-1 et 001-2 sont comptées comme étant la même chose. Merci. – KorbenDallas

1

Je pense que cela va fonctionner:

select * 
from table 
where Date in (
    select distinct(Date) as unique_date from table order by unique_date DESC limit <num> 
) 

L'idée est d'utiliser la sous-sélection avec une limite à seulement identifier les dates qui vous intéressent.

EDIT: Certaines bases de données n'autorisent pas de limite dans une sous-requête (je vous regarde, mysql). Dans ce cas, vous devrez créer une table temporaire hors de la sous-requête, puis en sélectionner *.

Questions connexes