Tenho vários pedidos de produtos e estou tentando agrupar por data e somar a quantidade dessa data. Como posso agrupar por mês / dia / ano sem levar em consideração a parte do tempo?
3/8/2010 7:42:00
deve ser agrupado com 3/8/2010 4:15:00
Tenho vários pedidos de produtos e estou tentando agrupar por data e somar a quantidade dessa data. Como posso agrupar por mês / dia / ano sem levar em consideração a parte do tempo?
3/8/2010 7:42:00
deve ser agrupado com 3/8/2010 4:15:00
Respostas:
Transmitir / converter os valores em um Date
tipo para o seu grupo por.
GROUP BY CAST(myDateTime AS DATE)
DateTime.Date
.
DateTime.Date
- Entity Framework:EntityFunctions.TruncateTime(myDateTime)
GROUP BY DATEADD(day, DATEDIFF(day, 0, MyDateTimeColumn), 0)
Ou no SQL Server 2008 em diante, você pode simplesmente transmitir Date
como @Oded sugerido:
GROUP BY CAST(orderDate AS DATE)
No pré Sql 2008, removendo a parte da data:
GROUP BY CONVERT(CHAR(8),DateTimeColumn,10)
GROUP BY DATE(date_time_column)
Aqui está um exemplo que eu usei quando precisei contar o número de registros para uma data específica sem a parte da hora:
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)
Aqui está o exemplo funciona bem no oracle
select to_char(columnname, 'DD/MON/yyyy'), count(*) from table_name group by to_char(createddate, 'DD/MON/yyyy');
Eu acredito que você precisa se agrupar, naquele dia do mês do ano. então porque não usar as funções TRUNK_DATE. A maneira como funciona é descrita abaixo:
Group By DATE_TRUNC('day' , 'occurred_at_time')