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


2
Lihat juga grup
Michael Freidgeim

Jawaban:


374

Keluarkan / Konversikan nilai menjadi Datetipe untuk grup Anda oleh.

GROUP BY CAST(myDateTime AS DATE)

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)



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)

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');

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);

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')

date_trunc adalah untuk PostgreSQL bukan SQL Server yang menggunakan tag, OP sedang mencari solusi untuk SQL server.
Dave Hogan
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.