Saya memiliki meja dengan dua bidang - datetime
dan int
. Saya ingin melakukan grup dengan datetime
satu - satunya pada tanggal mengabaikan jam dan menit. The SELECT
pernyataan harus kembali tanggal yang memetakan ke jumlah dari int dari satu hari.
sql-server
datetime
select
group-by
Steven
sumber
sumber
Jawaban:
SELECT CAST(Datetimefield AS DATE) as DateField, SUM(intfield) as SumField FROM MyTable GROUP BY CAST(Datetimefield AS DATE)
sumber
select convert(convert(int, getdate()), datetime)
gagal dengan kesalahan sintaks yang salahKarena dia tidak menentukan versi SQL server yang dia gunakan (
date
tipe tidak tersedia pada tahun 2005), seseorang juga dapat menggunakanSELECT CONVERT(VARCHAR(10),date_column,112),SUM(num_col) AS summed FROM table_name GROUP BY CONVERT(VARCHAR(10),date_column,112)
sumber
DATEADD(dd, DATEDIFF(dd, 0, date_field),0)
Saya datang untuk meneliti opsi yang harus saya lakukan ini, namun, saya yakin metode yang saya gunakan adalah yang paling sederhana:
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;
sumber
- Saya suka ini karena tipe datanya dan formatnya tetap konsisten dengan tipe data waktu tanggal
;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
sumber
Secara pribadi saya lebih suka fungsi format, memungkinkan Anda untuk mengubah bagian tanggal dengan sangat mudah.
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;
sumber