Come posso raggruppare per colonna data e ora senza prendere in considerazione il tempo


221

Ho un sacco di ordini di prodotti e sto cercando di raggruppare per data e sommare la quantità per quella data. Come posso raggruppare per mese / giorno / anno senza prendere in considerazione la parte temporale?

3/8/2010 7:42:00 dovrebbe essere raggruppato con 3/8/2010 4:15:00


2
Vedi anche gruppo
Michael Freidgeim,

Risposte:


374

Trasmetti / Converti i valori in un Datetipo per il tuo gruppo per.

GROUP BY CAST(myDateTime AS DATE)

3
sai come farei lo stesso con LINQ to SQL?
The Muffin Man,

1
@Nick - non sono sicuro. Prova a usare DateTime.Date.
Oded,

3
- Linq to Sql: DateTime.Date- Entity Framework:EntityFunctions.TruncateTime(myDateTime)
The Muffin Man

1
Sono d'accordo, stavo rispondendo a The Muffin Man che lo stava chiedendo in un contesto ORM.
Niels Brinch

4
Grazie mille ... ha risolto il mio problema. aggiunto 'group by CAST (date_modified AS DATE)'. non dimenticare di aggiungere lo stesso (CAST (date_modified AS DATE)) in select cluase.
Mohammed mansoor,

25
GROUP BY DATEADD(day, DATEDIFF(day, 0, MyDateTimeColumn), 0)

O in SQL Server 2008 in poi potresti semplicemente eseguire il cast Date come suggerito da @Oded:

GROUP BY CAST(orderDate AS DATE)



2

Ecco un esempio che ho usato quando avevo bisogno di contare il numero di record per una data particolare senza la parte temporale:

select count(convert(CHAR(10), dtcreatedate, 103) ),convert(char(10), dtcreatedate, 103)
FROM dbo.tbltobecounted
GROUP BY CONVERT(CHAR(10),dtcreatedate,103)
ORDER BY CONVERT(CHAR(10),dtcreatedate,103)

1
L'ORDINE BY non funzionerà come previsto perché non lo tratterà come una data, quindi verrà ordinato per giorno
Arma X

2

Ecco l'esempio funziona bene in Oracle

select to_char(columnname, 'DD/MON/yyyy'), count(*) from table_name group by to_char(createddate, 'DD/MON/yyyy');

2

Campo datetime CAST fino ad oggi

select  CAST(datetime_field as DATE), count(*) as count from table group by CAST(datetime_field as DATE);

0

Credo che devi raggrupparti, in quel giorno del mese dell'anno. quindi perché non utilizzare le funzioni TRUNK_DATE. Il modo in cui funziona è descritto di seguito:

Group By DATE_TRUNC('day' , 'occurred_at_time')

date_trunc è per PostgreSQL non per SQL Server che, passando per i tag, l'OP stava cercando una soluzione per SQL server.
Dave Hogan,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.