Ho una tabella con due campi - datetime
e int
. Voglio fare un gruppo da datetime
solo alla data ignorando l'ora e il minuto. L' SELECT
istruzione dovrebbe restituire una data che corrisponde alla somma dell'int di un singolo giorno.
Ho una tabella con due campi - datetime
e int
. Voglio fare un gruppo da datetime
solo alla data ignorando l'ora e il minuto. L' SELECT
istruzione dovrebbe restituire una data che corrisponde alla somma dell'int di un singolo giorno.
Risposte:
SELECT CAST(Datetimefield AS DATE) as DateField, SUM(intfield) as SumField
FROM MyTable
GROUP BY CAST(Datetimefield AS DATE)
select convert(convert(int, getdate()), datetime)
fallisce con un errore di sintassi errato
Poiché non ha specificato quale versione del server SQL utilizza (il date
tipo non è disponibile nel 2005), si potrebbe anche utilizzare
SELECT CONVERT(VARCHAR(10),date_column,112),SUM(num_col) AS summed
FROM table_name
GROUP BY CONVERT(VARCHAR(10),date_column,112)
DATEADD(dd, DATEDIFF(dd, 0, date_field),0)
Sono venuto alla ricerca delle opzioni che avrei dovuto fare, tuttavia, credo che il metodo che uso sia il più semplice:
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;
- Mi piace perché il tipo di dati e il formato rimangono coerenti con un tipo di dati data e ora
;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
Personalmente preferisco la funzione di formattazione, ti permette di cambiare semplicemente la parte della data molto facilmente.
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;