2011-06-10 4 views
1

J'essaye de construire un rapport d'accès basé sur les données de plusieurs tables différentes dans la base de données.Requête MS Access difficile - comment les combiner?

J'ai 3 colonnes qui effectuent des calculs, et je me demande comment mettre cette requête ensemble. Les trois colonnes traitent des dates, mais les calculent différemment.

La première colonne récupère la date la plus récente de l'action pour un nom d'utilisateur si le type d'action est « B »:

select pid, Max(date) as most_recent 
from actions 
where ref = 'B' 
group by pid; 

La seconde colonne effectue un calcul sur la base de 2 champs, l'un est une date et un est un nombre en mois. Je ne sais pas comment ajouter ces deux champs de sorte que le nombre est ajouté à la date comme un nombre de mois.

ce que j'ai à ce jour est:

select nummonths,Max(lastvisit) from users 

les troisième colonne je dois sélectionner la première date des thats dans le futur pour chaque utilisateur (prochaine date de rendez-vous), il y aura des dates avant et après cette date si son un peu difficile:

select uid,date from visits 

le code pour les 2 dernières requêtes doit être légèrement modifié, et je me demandais quelle est la meilleure approche serait de jo dans ces tous ensemble? Un type de jointure?

+1

Pourriez-vous fournir des exemples de données pour les trois tables (avec uniquement les champs applicables) et un exemple de résultat? Cela aidera à répondre à votre question. – NGLN

+1

Est-ce que l'expression 'Max (date)' fait référence au champ Max() du champ 'actions.date'? Si tel est le cas, vous devez vraiment le spécifier, car l'optimiseur de requête Jet/ACE peut décider que vous voulez juste le Max() de la date actuelle (puisque c'est ce que renvoie la fonction Date()). En bref, vous devriez vraiment éviter les mots réservés comme noms de champs, mais quand vous devez les utiliser (par exemple, quelqu'un d'autre contrôle la conception de la table), vous pouvez contourner le problème en les spécifiant complètement (avec le nom de la table) mot réservé avec des crochets, 'Max (actions. [date])'. –

Répondre

1

Si vous devez générer un rapport avec les données des 3 requêtes, vous aurez besoin de données associées pour les joindre. Dans ce cas, veuillez envoyer la structure des tables. Si vous devez afficher 3 listes dans un rapport, vous pouvez utiliser des sous-rapports: créez un nouveau rapport vide. En mode Création, vous pouvez ajouter 3 sous-rapports dans la barre d'outils. Pour chacun des sous-rapports, attribuez la propriété de source d'enregistrement au sql correspondant.

concernant

+0

+1 Pour mentionner le besoin de données connexes. – NGLN

0

Je ne suis pas sûr comment ajouter ces deux domaines afin que le nombre est ajouté à la date comme un certain nombre de mois.

Utilisez la fonction DateAdd():

SELECT DateAdd("m", 2, LastVisit) FROM ... 

résultats à une date deux mois à compter de la date des dernières visites.