2016-06-11 5 views
0

Ich habe eine Tabelle, die CHECKTIME, USERID und CHECKTYPE enthalten. Dieser CHECKTIME-Typ ist datetime. Ich möchte diese Daten ohne doppeltes CHECKTIME-Datum erhalten. Zum Beispiel sind meine Daten wie folgt:Wählen Sie alle Felder mit Gruppierung nach Klausel in Frau Access

USERID | CHECKTIME   | CHECKTYPE 
1  | 2016-05-01 06:58:00 | I 
1  | 2016-05-01 06:59:00 | I 
1  | 2016-05-02 06:58:00 | I 
1  | 2016-05-02 06:58:10 | I 
1  | 2016-05-02 06:59:00 | I 

Kann jemand dieses doppelte Datum entfernen? Also, von oben Daten, kann ich wie folgt ergeben:

USERID | CHECKTIME   | CHECKTYPE 
1  | 2016-05-01 06:58:00 | I 
1  | 2016-05-02 06:58:00 | I 

ich bereits versucht, Gebrauch deutlich, aber es funktioniert nicht funktioniert, weil ich für jede unterschiedliche CHECKTIME Zeit haben. Und ich benutze bereits GROUP BY-Klausel, aber es kann mir nur 1 Feld ergeben.

Meine Abfrage richtig ist nun wie folgt aus:

SELECT USERID, CHECKTYPE, CHECKTIME, DAY(CHECKTIME) 
FROM CHECKINOUT 
WHERE USERID = 259 
AND MONTH(CHECKTIME)='5' 
AND YEAR(CHECKTIME)='2016' 
AND CHECKTYPE = 'I' 
GROUP BY DAY(CHECKTIME) 
ORDER BY DAY(CHECKTIME) ASC 

und es Cames mit Fehler über Aggregatfunktion.

+0

Haben Sie die Duplikate aus Ihrer Tabelle entfernen wollen - oder einfach nur so sie als eindeutige Datensätze in einer Abfrage anzeigen? – dbmitch

+0

Wird nicht entfernt, sondern ohne doppelte Zeile angezeigt. Es ist wie mit der Gruppe nach, aber ich weiß nicht, warum meine Gruppenklausel bei Zugriff nicht funktionierte. –

+0

Okay - aktualisierter SQL unter – dbmitch

Antwort

1

Brauchen Sie die Zeit?

SELECT DISTINCT 
USERID, Format([CHECKTIME],"yyyy/mm/dd") AS CHECKDATE, CHECKTYPE 
FROM CHECKINOUT; 

Ergebnisse in zwei Datensätze ohne die Zeit

USERID | CHECKTIME | CHECKTYPE 
1  | 2016-05-01 | I 
1  | 2016-05-02 | I 

Oder suchen Sie zum ersten Mal für jeden einzelnen Tag? Dies wird es tun

EDIT: added ORDER BY DATE KLAUSEL

SELECT DISTINCT USERID, CHECKTYPE, 
    Format([CHECKTIME],"yyyy/mm/dd") AS CHECKDATE, 
    Min(CHECKINOUT.CHECKTIME) AS FirstCheckTime 
FROM CHECKINOUT 
WHERE (Month([CheckTime])=5) AND (Year([CheckTime])=2016) 
GROUP BY USERID, CHECKTYPE, Format([CHECKTIME],"yyyy/mm/dd") 
HAVING ((USERID=1) AND (CHECKTYPE="I")) 
ORDER BY Format([CHECKTIME],"yyyy/mm/dd"); 

wie folgt aussieht:

USERID CHECKTYPE CHECKDATE FirstCheckTime 
1   I  2016/05/01 2016-05-01 06:58:00 
1   I  2016/05/02 2016-05-02 06:58:00 
+0

In der Tat muss ich erstmal für jeden Tag einchecken. Brauche immer noch die Zeit, nicht nur das Datum. Es ist wie MIN-Klausel, deshalb habe ich ORDER BY-Klausel –

+0

Aktualisierte alternative SQL-Klausel für Sie – dbmitch

+0

Es ergeben keine Daten mit Ihrer 2. Klausel .. --edit, sorry, ich habe nur Benutzer-ID ändern, und es funktioniert reibungslos ... danke Sie so sehr .. –

Verwandte Themen