2009-06-22 12 views
2

Utilisation de base de données AccessComment afficher une colonne de date d'aujourd'hui, la colonne de temps, colonne de date précédente, colonne de temps

Tableau

Cardno name  cardeventdate Intime Outtime 

0001 Michael  20080811  102746 185249 
0001 Michael  20080812  080828 080828 
0002 Michael  20080811  082615 082615 
0002 Michael  20080812  073624 190605 

Du tableau ci-dessus, je veux afficher une autre Deux colonnes comme

Cardno, nom, cardeventdate, Intime, Outtime, Hier cardeventdate (Date de la colonne précédente), Hier Outtime (Previous colonne Outtime)

Pour Cardno - 0001
Nom - Michael
Date - 20080811
INTIME - 102746
Outtime - 185249
Hier Date - 102746
Hier Outtime - 185249

Par exemple, aujourd'hui INTIME est 090000 et Outtime est 180000 Je veux pour afficher aujourd'hui Date, Intime, Outtime, Colonne date précédente, Colonne Date sortie précédente appartiennent à Cardno

Ma date n'est pas continuellement, dans ma base de données date est comme 20090601 , 20090508. Nous ne pouvons pas mettre ce jour-1

Am aide sous requêtes

Résultats escomptés

Cardno name cardeventdate Intime Outtime Yesterdaycardeventdate YesterdayOuttime 

0001 Michael 20080811  102746 185249 20080810    175050 
0001 Michael 20080812  080828 080828 20080811    185249 
0002 Michael 20080811  082615 082615 20080810    192727 
0002 Michael 20080812  073624 190605 20080811    082615 

Besoin Interrogation aide?

+0

Par précédente, voulez-vous dire dans le temps drainant, ou ligne précédente la base de données? Et est-ce antérieur pour le CARDNO actuel, ou pour tout CARDNO? – RedFilter

+0

Dans la sortie attendue, vous ne semblez pas trier par CARDNO, ou CARDEVENTDATE, donc je ne comprends pas vraiment le point de cette sortie. Pouvez-vous clarifier les exigences de l'entreprise? – RedFilter

+0

Oui, pour la même carte, il devrait afficher un enregistrement précédent.Ne pas afficher un enregistrement précédent, il devrait afficher la date et le temps d'arrêt de la colonne précédente pour cette carte –

Répondre

1

"Précédent" n'est pas un concept absolu dans SQL Server - cela dépend de la façon dont vos données sont triées. Comment triez-vous le jeu de résultats? Je ne vois rien qui soit vrai sur toutes les lignes.

La solution SQL 2000 est moche, mais elle ressemble à peu près à ceci: ** Note: Code édité sur la base des informations supplémentaires ci-dessus.

SELECT CARDNO, CARDEVENTDATE, INTIME, OUTTIME, 
     (SELECT TOP 1 CARDEVENTDATE 
     FROM MyTable b 
     WHERE a.CARDNO = b.CARDNO 
     AND a.INTIME > b.INTIME 
     ORDER BY INTIME DESC) AS PREVCARDEVENTDATE, 
     (SELECT TOP 1 OUTTIME 
     FROM MyTable b 
     WHERE a.CARDNO = b.CARDNO 
     AND a.INTIME > b.INTIME 
     ORDER BY INTIME DESC) AS PREVOUTTIME 
FROM MyTable AS a 

Une solution beaucoup plus flexible est disponible en utilisant SQL 2005 ou 2008 et le classement des fonctions - un coup d'oeil à mon blog ici si vous êtes intéressé:

http://thehobt.blogspot.com/2009/02/rownumber-rank-and-denserank.html

+0

am Utilisation des sous-requêtes, intime et temps d'arrêt à partir de l'heure, donc comment je dois utiliser votre requête. qu'est-ce que mysortfield? –

+0

D'après vos commentaires aux commentaires laissés sur la question originale, vous devez trier par INTIME ou OUTTIME (j'imagine qu'ils produiront le même résultat) et filtrer les sous-requêtes en utilisant le CARDNO de la requête externe. J'ai ajusté mon message pour refléter cela - jetez un oeil. –

+0

J'ai essayé votre requête, mais elle montre une erreur, ci-dessous j'ai posté ma requête Comment puis-je utiliser votre de ma requête? S'il vous plaît. –

0

Pouvez-vous pas lancer la chaîne à un smalldatetime puis retirez une de la date - tels que la fonte (« 20080102 » en smalldatetime) -1

0

Pouvez-vous pas lancer la chaîne à un smalldatetime puis retirez l'un de la date - tels que la fonte ('20080102' en smalldatetime) -1

casting ('20080101' comme smalldatetime) -1 retournera 20080100

Questions connexes