İki alanlı bir masam var - datetime
ve int
. datetime
Saat ve dakikayı görmezden gelerek sadece tarihte bir grup yapmak istiyorum . SELECT
İfadesi tek bir gün int toplamına eşleştiren bir tarih dönmelidir.
Yanıtlar:
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)
yanlış sözdizimi hatasıyla başarısız
Hangi SQL sunucusu sürümünü kullandığını belirtmediğinden ( date
tür 2005'te mevcut değildir), biri de kullanabilir
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)
Bunu yapmam gereken seçenekleri araştırmaya geldim, ancak kullandığım yöntemin en basit olduğuna inanıyorum:
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;
- Veri türü ve biçim bir tarih ve saat veri türü ile tutarlı kaldığı için bunu seviyorum
;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
Şahsen ben format fonksiyonunu tercih ediyorum, tarih kısmını çok kolay bir şekilde değiştirmenize izin veriyor.
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;