2009-06-28 2 views
0

Mit MS Access-DatenbankWie heute Rekord min (Zeit) und Vortages Rekord max (Zeit)

Ich möchte zeigen heute Rekord min (Zeit) und Vortages Rekord max (Zeit)

erhalten Tabelle

PERSON ID CARDEVENTDATE CARDEVENTTIME 
5008  20090805  080000 
5008  20090805  140000 
5008  20090809  180000 
5008  20090809  220000 
5008  20090813  090000 
5008  20090813  200000 
5008  20090818  110000 
5008  20090818  232200 
3405  20090805  080000 
3405  20090805  180000 
3405  20090809  070000 
3405  20090809  230000 
3010  20080806  090000 
3010  20080806  230000 
3010  20080810  100000 
3010  20080810  160000 

und so weiter ...

Aus der obigen Tabelle ich möchte heute min (Zeit) und Vortages max anzuzeigen (Zeit)

Früherer Tag bedeutet nicht gestern, vorheriger Cardeventtime für die bestimmte Person ID.

Ich verwende Unterabfragen.

Ich verwende unten genannte Abfrage.

"SELECT PERSONID, CARDEVENTDATE, MIN (CARDEVENTTIME) AS INTIME, 
    MAX (CARDEVENTTIME) AS OUTTIME FROM (SELECT T_PERSON.PERSONID, 
    T_CARDEVENT.CARDEVENTDATE, T_CARDEVENT.CARDEVENTTIME 
FROM (T_TITLE INNER JOIN T_PERSON ON T_TITLE.TITLECODE = T_PERSON.TITLECODE) 
    INNER JOIN T_CARDEVENT ON T_PERSON.PERSONID = T_CARDEVENT.PERSONID 
WHERE T_CARDEVENT.CARDEVENTDATE BETWEEN '" & sdate & "' AND '" & edate & "' 
ORDER BY T_PERSON.TITLECODE) GROUP BY PERSONID, CARDEVENTDATE))" 

Aber ich bin nicht in der Lage, den vorherigen Tag max (Zeit) zu bekommen. Ich möchte heute Min (Zeit) und Vortag Max (Zeit) für die bestimmte Person ID bekommen.

Früherer Tag bedeutet nicht gestern, vorheriger Cardeventtime für die bestimmte Personenidentifikation.

Erwarteter Ausgang.

PERSON ID CARDEVENTDATE MIN TIME CARDEVENTDATE MAX TIME 
5008  20090818  110000 20090813  200000 
5008  20090813  090000 20090809  220000 
5008  20090809  180000 20090805  140000 
3405  20090809  070000 20090805  180000 
3010  20080810  100000 20080806  230000 

und so weiter ...

benötigen Query-Hilfe.

+0

Vielen Dank für das Entfernen der Kappen ... –

+0

Warum enthält Ihre Ausgabe drei Zeilen für 5008? Ich glaube nicht, dass ich Ihre Logik genug verstehe, um Ihnen eine Antwort zu geben. Ich würde denken, dass es 1 Reihe pro PersonID von Ihrer Beschreibung haben sollte. –

Antwort

1

Scrap letzte Antwort.

Angenommen, Sie haben Ihre Abfrage als DAYMINMAX gespeichert.
Sie werden eine andere Abfrage erstellen müssen:

SELECT a.PERSONID 
    , MAX(b.CARDEVENTDATE) AS PREVDAY 
    , a.CARDEVENTDATE AS NEWDAY 
    FROM DAYMINMAX AS a INNER JOIN 
     DAYMINMAX AS b ON a.PERSONID = b.PERSONID 
         AND a.CARDEVENTDATE > b.CARDEVENTDATE 
    GROUP BY a.PERSONID, a.CARDEVENTDATE 

Diese Abfrage gibt Ihnen ein Datum und seine früheren Zeitpunkt pro Person. Sagen wir es DAYPREVNEW. Nun müssen Sie noch eine andere Abfrage (die Sie wollen):

SELECT a.PERSONID 
    , a.PREVDAY 
    , b.OUTTIME 
    , a.NEWDAY 
    , c.INTIME 
    FROM (DAYPREVNEW AS a INNER JOIN 
     DAYMINMAX AS b ON a.PERSONID = b.PERSONID AND a.PREVDAY = b.CARDEVENTDATE) INNER JOIN DAYMINMAX AS c ON a.PERSONID = c.PERSONID AND a.NEWDAY = c.CARDEVENTDATE 

Wie Ihre ursprüngliche Abfrage so oft verwiesen wird, die Antwort erforderlich zu schaffen, ist es am besten, es als eine separate Abfrage zu erstellen, als die Verwendung von Unterabfragen.

+0

@Wilhelm. Syntaxfehler im Join-Operator wird angezeigt - Gopal – Gopal

+0

Bekomme immer noch keine richtige Antwort – Gopal