Mam stół z dwoma polami - datetime
i int
. Chcę datetime
umówić się na spotkanie tylko w dniu, ignorując godzinę i minuty. SELECT
Stwierdzenie powinno powrócić datę, która mapuje do sumy int jednego dnia.
sql-server
datetime
select
group-by
Steven
źródło
źródło
Odpowiedzi:
SELECT CAST(Datetimefield AS DATE) as DateField, SUM(intfield) as SumField FROM MyTable GROUP BY CAST(Datetimefield AS DATE)
źródło
select convert(convert(int, getdate()), datetime)
Nie ze złej błąd składniPonieważ nie sprecyzował, jakiej wersji serwera SQL używa (
date
typ nie jest dostępny w 2005 roku), można go było również użyćSELECT CONVERT(VARCHAR(10),date_column,112),SUM(num_col) AS summed FROM table_name GROUP BY CONVERT(VARCHAR(10),date_column,112)
źródło
DATEADD(dd, DATEDIFF(dd, 0, date_field),0)
Przyszedłem badać opcje, które musiałbym zrobić, jednak uważam, że metoda, której używam, jest najprostsza:
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;
źródło
- Podoba mi się to, ponieważ typ danych i format pozostają zgodne z typem danych daty i godziny
;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
źródło
Osobiście wolę funkcję formatowania, która pozwala bardzo łatwo zmienić część daty.
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;
źródło