Eu tenho uma tabela com dois campos - datetime
e int
. Quero fazer um grupo de no datetime
único na data ignorando a hora e o minuto. A SELECT
instrução deve retornar uma data que mapeia para a soma do int de um único dia.
sql-server
datetime
select
group-by
Steven
fonte
fonte
Respostas:
SELECT CAST(Datetimefield AS DATE) as DateField, SUM(intfield) as SumField FROM MyTable GROUP BY CAST(Datetimefield AS DATE)
fonte
select convert(convert(int, getdate()), datetime)
falha com erro de sintaxe incorretaComo ele não especificou qual versão do servidor SQL ele usa (
date
tipo não disponível em 2005), também pode serSELECT CONVERT(VARCHAR(10),date_column,112),SUM(num_col) AS summed FROM table_name GROUP BY CONVERT(VARCHAR(10),date_column,112)
fonte
DATEADD(dd, DATEDIFF(dd, 0, date_field),0)
Vim pesquisar as opções que teria para fazer isso, porém, acredito que o método que utilizo é o mais simples:
SELECT COUNT(*), DATEADD(dd, DATEDIFF(dd, 0, date_field),0) as dtgroup FROM TABLE GROUP BY DATEADD(dd, DATEDIFF(dd, 0, date_field),0) ORDER BY dtgroup ASC;
fonte
- Eu gosto disso porque o tipo de dados e o formato permanecem consistentes com um tipo de dados data e hora
;with cte as( select cast(utcdate as date) UtcDay, DATEPART(hour, utcdate) UtcHour, count(*) as Counts from dbo.mytable cd where utcdate between '2014-01-14' and '2014-01-15' group by cast(utcdate as date), DATEPART(hour, utcdate) ) select dateadd(hour, utchour, cast(utcday as datetime)) as UTCDateHour, Counts from cte
fonte
Pessoalmente, prefiro a função de formato, permite que você simplesmente altere a parte da data com muita facilidade.
declare @format varchar(100) = 'yyyy/MM/dd' select format(the_date,@format), sum(myfield) from mytable group by format(the_date,@format) order by format(the_date,@format) desc;
fonte