Bagaimana saya bisa mengelompokkan berdasarkan kolom waktu tanggal tanpa mempertimbangkan waktu

221

Saya memiliki banyak pesanan produk dan saya mencoba mengelompokkan berdasarkan tanggal dan menjumlahkan jumlah untuk tanggal tersebut. Bagaimana saya bisa mengelompokkan berdasarkan bulan / hari / tahun tanpa mempertimbangkan bagian waktu?

3/8/2010 7:42:00 harus dikelompokkan dengan 3/8/2010 4:15:00

Pria Muffin
sumber
2
Lihat juga grup
Michael Freidgeim

Jawaban:

374

Keluarkan / Konversikan nilai menjadi Datetipe untuk grup Anda oleh.

GROUP BY CAST(myDateTime AS DATE)
Oded
sumber
3
apakah Anda tahu bagaimana saya akan melakukan hal yang sama dengan LINQ ke SQL?
The Muffin Man
1
@Nick - tidak yakin. Coba gunakan DateTime.Date.
Oded
3
- Linq ke Sql: DateTime.Date- Kerangka Entitas:EntityFunctions.TruncateTime(myDateTime)
The Muffin Man
1
Saya setuju, saya merespons The Muffin Man yang menanyakannya dalam konteks ORM.
Niels Brinch
4
Terima kasih banyak ... ini menyelesaikan masalah saya. menambahkan 'grup oleh CAST (date_modified AS DATE)'. jangan lupa untuk menambahkan yang sama (CAST (date_modified AS DATE)) di cluase pilih.
Mohammed mansoor
25
GROUP BY DATEADD(day, DATEDIFF(day, 0, MyDateTimeColumn), 0)

Atau di SQL Server 2008 dan seterusnya, Anda cukup menggunakan casting Date seperti yang disarankan @Oded:

GROUP BY CAST(orderDate AS DATE)
Mitch Wheat
sumber
16

Di pra Sql 2008 Dengan mengambil bagian tanggal:

GROUP BY CONVERT(CHAR(8),DateTimeColumn,10)
Kamyar
sumber
2
Untuk penjelasan tentang fungsi konversi dan tipe waktu tanggal (artinya char (8) dan 10), lihat w3schools.com/sql/func_convert.asp
super1ha1
7

GROUP BY DATE(date_time_column)

Aravindh Gopi
sumber
2

Berikut adalah contoh yang saya gunakan ketika saya perlu menghitung jumlah catatan untuk tanggal tertentu tanpa bagian waktu:

select count(convert(CHAR(10), dtcreatedate, 103) ),convert(char(10), dtcreatedate, 103)
FROM dbo.tbltobecounted
GROUP BY CONVERT(CHAR(10),dtcreatedate,103)
ORDER BY CONVERT(CHAR(10),dtcreatedate,103)
pengguna3169774
sumber
1
ORDER BY tidak akan berfungsi sebagaimana mestinya karena ia tidak akan memperlakukannya sebagai tanggal sehingga akan disortir berdasarkan hari
Senjata X
2

Berikut adalah contoh yang berfungsi dengan baik di oracle

select to_char(columnname, 'DD/MON/yyyy'), count(*) from table_name group by to_char(createddate, 'DD/MON/yyyy');
Radhakrishnan
sumber
2

Bidang datast CAST hingga saat ini

select  CAST(datetime_field as DATE), count(*) as count from table group by CAST(datetime_field as DATE);
Ruchira
sumber
0

Saya yakin Anda perlu berkelompok, pada hari itu di bulan tahun. jadi mengapa tidak menggunakan fungsi TRUNK_DATE. Cara kerjanya dijelaskan di bawah ini:

Group By DATE_TRUNC('day' , 'occurred_at_time')
alireza
sumber
date_trunc adalah untuk PostgreSQL bukan SQL Server yang menggunakan tag, OP sedang mencari solusi untuk SQL server.
Dave Hogan