Ich möchte alle Verkäufe auflisten und die Summe nach Tag gruppieren.
Sales (saleID INT, amount INT, created DATETIME)
Update Ich verwende SQL Server 2005
sql
sql-server
sql-server-2005
group-by
mrblah
quelle
quelle
Antworten:
Wenn Sie SQL Server verwenden,
dateadd(DAY,0, datediff(day,0, created))
gibt den erstellten Tag zurückWenn der Verkauf beispielsweise am '2009-11-02 06: 12: 55.000' erstellt wurde,
dateadd(DAY,0, datediff(day,0, created))
geben Sie '2009-11-02 00: 00: 00.000' zurück.quelle
Für SQL Server:
oder schneller (vom Q8-Coder):
Für MySQL:
oder besser (von Jon Bright):
Für Oracle:
oder schneller (von IronGoofy):
Für Informix (von Jonathan Leffler):
quelle
Wenn Sie MySQL verwenden:
Wenn Sie MS SQL 2008 verwenden:
quelle
convert(varchar,DateColumn,101)
Tatsächlich hängt dies davon ab, welches DBMS Sie verwenden. In regulärem SQL wird das DATETIME-Format jedoch auf das Datum (einen Tag) geändert.so:
die magix nummer
101
gibt an, in welches Datumsformat sie konvertiert wirdquelle
Wenn Sie SQL Server verwenden, können Sie Ihrer Tabelle drei berechnete Felder hinzufügen:
und jetzt können Sie leicht nach Tag, Monat oder Jahr des Verkaufs gruppieren, bestellen usw.:
Diese berechneten Felder werden immer auf dem neuesten Stand gehalten (wenn sich Ihr "Erstellungsdatum" ändert), sie sind Teil Ihrer Tabelle, sie können wie normale Felder verwendet und sogar indiziert werden (wenn sie "PERSISTED" sind). ) - tolles Feature, das meiner Meinung nach völlig ungenutzt ist.
Marc
quelle
Für Orakel kannst du
da dies die erstellte Datumszeit auf die vorherige Mitternacht abschneidet.
Eine andere Option ist zu
Dies erzielt das gleiche Ergebnis, kann jedoch langsamer sein, da eine Typkonvertierung erforderlich ist.
quelle
Für PostgreSQL:
oder mit Besetzung:
Wenn Sie Geschwindigkeit wünschen, verwenden Sie die zweite Option und fügen Sie einen Index hinzu:
quelle
benutze linq
quelle