2016-06-30 6 views
0

Ich habe eine Abfrage geschrieben, um zu überprüfen, ob mehr als ein Datensatz am selben Tag existiert. Zur Zeit der Auszug aus meiner Abfrage, die die Einschränkung der wie folgt aussieht führt:SQL Server 2008 Abfrageprüfungsdatum am selben Tag

GROUP BY 
    entry_date 
HAVING 
    COUNT(entry_date) > 1 

Als Einstieg Spalte wird als datetime definiert, überprüft es gegen die volle Datumzeit oder einfach nur das Datum?

Danke.

+0

Ich kenne SQL Server nicht, aber was erhalten Sie, wenn Sie diese Spalte auswählen? – jarlh

+0

'2015-06-25 09: 31: 25.807' wäre, wenn Sie eine Select-Anweisung für diese Spalte gemacht hätten. – AkinW

+0

Dann müssen Sie den Datumsteil daraus extrahieren, sowohl in Gruppenklausel als auch in Habenklauseln. (Oder, noch besser, haben Sie eine abgeleitete Tabelle, wo Sie diesen Teil tun.) – jarlh

Antwort

1

Wenn entry_dateDATETIME ist, wird Ihre Gruppe nicht wie erwartet funktionieren. Sie müssen CAST es zu DATE. Cast(Datetime)to date is sargable auch.

GROUP BY cast(entry_date as DATE) 
having count(cast(entry_date as DATE)) > 1 
1

Da Sie nicht cast oder convert es zu etwas anderem machen, natürlich verwendet es alle verfügbaren Daten. Also würde es Daten mit genau dem gleichen Datum zusammen gruppieren. Warum erwartest du etwas anderes?

+0

Hallo, ich fragte nur, wenn ich diese Aussage mache und die Aufzeichnungen sehe ich Daten wie "2015-07-15 19: 30: 05.970" - '2015-07-15 19: 30: 05.547' zurückgegeben. Was darauf hindeutet, dass es den Millisekundenwert nicht respektiert. Vielen Dank. – AkinW

0

Es sollte volle datetime sein.

CONVERT(date, entry_date) 

sollte das Datum trennen.