2010-02-05 4 views
0

J'ai 2 tables à partir desquelles j'ai besoin d'exécuter une requête pour afficher le nombre de vues qu'un utilisateur a eu au cours des 3 derniers mois. Jusqu'ici je suis arrivé avec: tous les types de champs sont corrects. Fondamentalement, le code ci-dessus affiche une liste de tous les enregistrements des 3 derniers mois; cependant, il commence à partir du 1er jour du mois et se termine à la date actuelle, mais j'en ai besoin pour commencer 3 mois avant la date d'aujourd'hui.Sélection des enregistrements des trois derniers mois

Aussi pour vous faire savoir ceci est SQL View dans le code MS Access 2007.

Merci à l'avance

+0

Alors, quelle est votre question? – APC

+0

Désolé, fondamentalement le code ci-dessus affiche une liste de tous les enregistrements dans les 3 derniers mois, mais il commence à partir du 1er jour du mois et se termine à la date actuelle, mais j'en ai besoin pour commencer 3 mois avant la date d'aujourd'hui. –

+0

Je ne sais pas grand-chose sur l'accès ms, mais d'une manière simplifiée, vous pouvez considérer cela comme l'exécution de trois questions distinctes (une de plus pour chaque 'ou'), et la fusion des résultats. il devrait être considérablement plus rapide de faire un 'DateAdd (" m ", -3, Now())' (ou bien vous obtenez 'aujourd'hui moins trois mois' en accès ms) et de faire une comparaison pour vérifier que 'sessionstart' est plus grand que ça. –

Répondre

2

Selon la façon dont « strictement » vous définissez votre 3 mois règle, vous pourriez faire des choses beaucoup plus facile et probablement efficace, en essayant ceci:

SELECT dbo_LU_USER.USERNAME, Count(*) AS No_of_Sessions 
FROM dbo_SDB_SESSION 
INNER JOIN dbo_LU_USER 
ON dbo_SDB_SESSION.FK_USERID = dbo_LU_USER.PK_USERID 
WHERE [dbo_SDB_SESSION].[SESSIONSTART] between now() and DateAdd("d",-90,now()) 
GROUP BY dbo_LU_USER.USERNAME; 

(S'il vous plaît comprendre que mon MS SQL est un peu rouillé, et ne peut pas le tester pour le moment: l'idée est de faire scanner tous les enregistrements dont la date est entre "AUJOURD'HUI" et "AUJOURD'HUI-90 jours".

+0

Merci, ça l'a fait: D –

+2

Je pense que vous pourriez obtenir une amélioration des performances en changeant 'entre now() et' simplement '>', puisque l'accès fera deux vérifications, c'est-à-dire pour les deux limites. Puisque sessionstart ne sera jamais dans le futur, il vous suffit de vérifier la partie '> -90', pas celle de'

+0

C'est encore une interprétation de 3 mois, c'est-à-dire il y a 90 jours! –

Questions connexes