2 Stimmen

Anzeige einer Spalte mit dem heutigen Datum, einer Zeitspalte, einer Spalte mit dem vorherigen Datum und einer Zeitspalte

Access-Datenbank verwenden

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

In der obigen Tabelle möchte ich eine weitere zweispaltige Spalte anzeigen

Kartennummer, Name, Kartenereignisdatum, Uhrzeit, Abfahrtszeit, Gestern Kartenereignisdatum (vorherige Spalte Datum), Gestern Abfahrtszeit (vorherige Spalte Abfahrtszeit)

Für Cardno - 0001
Name - Michael
Datum - 20080811
Intime - 102746
Ausschaltzeit - 185249
Gestern Datum - 102746
Gestern Überstunden - 185249

Beispiel: Heute ist Intime 090000 und Outtime ist 180000 Ich möchte das heutige Datum, die Uhrzeit, die Nachspielzeit, die Spalte "Vorheriges Datum" und die Spalte "Vorherige Nachspielzeit" anzeigen, die zu Cardno gehören.

Mein Datum ist nicht kontinuierlich, in meiner Datenbank ist das Datum wie 20090601, 20090508. Wir können also nicht Datum-1 setzen

Ich verwende Unterabfragen

Erwartetes Ergebnis

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

Benötigen Sie Hilfe bei der Abfrage?

1voto

Aaron Alton Punkte 22030

"Vorherige" 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 für alle Zeilen gilt.

Die Lösung für SQL 2000 ist hässlich, aber sie sieht im Wesentlichen wie folgt aus: **Anmerkung: Der Code wurde aufgrund der obigen zusätzlichen Informationen geändert.

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 viel flexiblere Lösung ist mit SQL 2005 oder 2008 und Ranking-Funktionen möglich - schauen Sie sich meinen Blogbeitrag hier an, wenn Sie daran interessiert sind:

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

0voto

Können Sie nicht die Zeichenkette in eine smalldatetime umwandeln und dann eine aus dem Datum entfernen - z. B. cast('20080102' as smalldatetime) -1

0voto

Niikola Punkte 1324

Können Sie nicht die Zeichenkette in eine smalldatetime umwandeln und dann eine aus dem Datum entfernen - z. B. cast('20080102' as smalldatetime) -1

cast('20080101' as smalldatetime) -1 ergibt 20080100

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X