Tengo una tabla con dos campos datetime
y int
. Quiero hacer un grupo el datetime
único en la fecha ignorando la hora y el minuto. La SELECT
declaración debe devolver una fecha que se corresponda con la suma del int de un solo día.
sql-server
datetime
select
group-by
Steven
fuente
fuente
Respuestas:
SELECT CAST(Datetimefield AS DATE) as DateField, SUM(intfield) as SumField FROM MyTable GROUP BY CAST(Datetimefield AS DATE)
fuente
select convert(convert(int, getdate()), datetime)
falla con un error de sintaxis incorrectaComo no especificó qué versión del servidor SQL usa (el
date
tipo no está disponible en 2005), también se podría usarSELECT CONVERT(VARCHAR(10),date_column,112),SUM(num_col) AS summed FROM table_name GROUP BY CONVERT(VARCHAR(10),date_column,112)
fuente
DATEADD(dd, DATEDIFF(dd, 0, date_field),0)
Vine investigando las opciones que tendría para hacer esto, sin embargo, creo que el método que uso es el más simple:
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;
fuente
- Me gusta esto como tipo de datos y el formato sigue siendo consistente con un tipo de datos de fecha y 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
fuente
Personalmente prefiero la función de formato, le permite simplemente cambiar la parte de la fecha muy fácilmente.
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;
fuente