2009-06-22 4 views
2

Verwendung von Access-DatenbankWie heute eine Datumsspalte, Zeitspalte, frühere Datumsspalte, Zeitspalte

Tabelle

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 

aus der obigen Tabelle angezeigt werden ich eine weitere Zwei-Säulen wie

anzeigen möchten

Cardno, Name, cardeventdate, Intime, Outtime, Gestern cardeventdate (Datum der letzten Spalte), Gestern Outtime (Vorherige Spalte Outtime)

Für Cardno - 0001
Name - Michael
Datum - 20080811
Intime - 102.746
outtime - 185.249
Gestern Datum - 102.746
Gestern outtime - 185249

Zum Beispiel heute Intime 090.000 und outtime ist 180000 Ich möchte Zur Anzeige von Heute Datum, Intime, Outtime, Datum des vorherigen Datums Spalte, Vorherige Spalte des Ausgangs gehören Cardno

Mein Datum ist nicht fortlaufend, in meinem Datenbankdatum ist wie 20090601 , 20090508. So können wir nicht Datum-1

Am Sub Abfragen mit

Erwartete Ausgabe

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 

Brauchen Query-Hilfe setzen?

+0

von vorherigen zurückkehren, sind Sie in der Zeit durchlässig bedeuten, oder vorherige Zeile in die Datenbank? Und ist es für den aktuellen CARDNO oder für irgendeinen CARDNO? – RedFilter

+0

In der erwarteten Ausgabe scheinen Sie nicht nach CARDNO oder CARDEVENTDATE zu sortieren, deshalb verstehe ich nicht wirklich den Sinn dieser Ausgabe. Können Sie die geschäftlichen Anforderungen klären? – RedFilter

+0

Ja, für die gleiche Karte, sollte es eine vorherige Aufzeichnung anzeigen.Zeigen Sie keinen vorherigen Datensatz an, es sollte das Datum und die Auszeit der vorherigen Spalte für diese Karte anzeigen –

Antwort

1

"Zurück" ist kein absolutes Konzept in SQL Server - es hängt davon ab, wie Ihre Daten sortiert sind. Wie sortieren Sie die Ergebnismenge? Ich kann nichts sehen, was in allen Zeilen gilt.

Die SQL 2000-Lösung ist hässlich, aber es sieht im Grunde so aus: ** Hinweis: Code Edited basierend auf zusätzlichen Informationen oben.

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 

Eine wesentlich flexiblere Lösung ist verfügbar SQL 2005 oder 2008 verwenden und Ranking-Funktionen - haben einen Blick auf mein Blog-Post hier, wenn Sie interessiert sind:

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

+0

Ich verwende Unterabfragen, Intime und Outtime, die von der Zeit kommen, also wie ich Ihre Abfrage verwenden muss. Was ist Mysortfield? –

+0

Aufgrund Ihrer Rückmeldung zu den Kommentaren, die Sie in der ursprünglichen Frage hinterlassen haben, müssen Sie nach INTIME oder OUTTIME sortieren (ich stelle mir vor, dass sie das gleiche Ergebnis liefern) und die Unterabfragen mit dem CARDNO aus der äußeren Abfrage filtern. Ich habe meinen Beitrag angepasst, um dies zu reflektieren - schau es dir an. –

+0

Ich habe versucht, Ihre Abfrage, aber es zeigt Fehler, unten habe ich meine Abfrage Wie muss ich Ihre aus meiner Abfrage verwenden? Bitte. –

0

Können Sie nicht werfen die Zeichenfolge in eine small und dann einen nach dem Datum entfernen - wie Guss (‚20080102‘ als small) -1

0

können Sie die Zeichenfolge in einem nicht small gegossen und dann einen von der entfernen Datum - wie Guss ('20080102' als small) -1

cast ('20080101' als small) -1 20.080.100