2017-08-21 1 views
0

Je suis en train de construire une base de données pour garder une trace de l'équipement de prêt. J'essaye de construire une requête qui montrera le dernier enregistrement de chaque emplacement de machines.Base de données Access - Record le plus récent - Fonction Max

Table pertinente est:

Mouvements:

  • ID Mouvement (PK)
  • EntryDate (généré automatiquement lors de l'entrée d'enregistrement)
  • série (FK à partir d'une table appelée stock, avec (Marque, modèle, etc)
  • Emplacement (où la machine est)
  • État (Des choses comme: Disponible, Testing, Vendu etc)

requête actuelle est:

SELECT Movements.Serial, Max(Movements.EntryDateMovements) AS MaxOfEntryDateMovements 
FROM Movements 
GROUP BY Movements.Serial; 

qui recrache la dernière date d'un enregistrement, et le numéro de série qui lui est associé.

Ce dont j'ai besoin est l'état à afficher dans les résultats, mais il est toujours groupé par la série. Mon problème est que lorsque j'essaie de l'ajouter, il revient soit avec une erreur à propos de l'expression ne faisant pas partie de la fonction d'agrégat, soit j'obtiens plus de résultats que prévu, car il ne garde plus les résultats unique à la série.

Je suis assez nouveau Access, et j'ai pu jusqu'à présent me débrouiller dans les guides, les livres, et ce site, pour que tout fonctionne bien, mais je suis bloqué par cet obstacle.

Toute aide serait grandement appréciée.

Répondre

0
Select top 1 * 
from Movements 
order by EntryDateMovements desc 

Cela vous donnera tout pour l'enregistrement le plus récent. C'est TSQL mais je pense que ça passe à Access.

0

Essayez cette

Select t.serial,t.EntryDateMovements ,t.location, t.status 
From movements as t 
Inner join (SELECT Movements.Serial, Max(Movements.EntryDateMovements) AS MaxOfEntryDateMovements 
FROM Movements 
GROUP BY Movements.Serial) as MaxMovements on t.serial= MaxMovements.serial and t.EntryDateMovements=MaxMovements.MaxOfEntryDateMovements 
+0

Merci beaucoup! Cela a fonctionné parfaitement. –