Saya ingin mendaftar semua penjualan, dan mengelompokkan jumlah berdasarkan hari.
Sales (saleID INT, amount INT, created DATETIME)
Pembaruan Saya menggunakan SQL Server 2005
sql
sql-server
sql-server-2005
group-by
mrblah
sumber
sumber
Jawaban:
jika Anda menggunakan SQL Server,
dateadd(DAY,0, datediff(day,0, created))
akan mengembalikan hari yang dibuatmisalnya, jika penjualan dibuat pada '2009-11-02 06: 12: 55.000',
dateadd(DAY,0, datediff(day,0, created))
kembalikan '2009-11-02 00: 00: 00.000'sumber
Untuk SQL Server:
atau lebih cepat (dari Q8-Coder):
Untuk MySQL:
atau lebih baik (dari Jon Bright):
Untuk Oracle:
atau lebih cepat (dari IronGoofy):
For Informix (oleh Jonathan Leffler):
sumber
Jika Anda menggunakan MySQL:
Jika Anda menggunakan MS SQL 2008:
sumber
sebenarnya ini tergantung pada DBMS apa yang Anda gunakan tetapi dalam SQL biasa
convert(varchar,DateColumn,101)
akan mengubah format DATETIME ke tanggal (satu hari)begitu:
angka magix
101
adalah format tanggal yang diubahnyasumber
Jika Anda menggunakan SQL Server, Anda bisa menambahkan tiga bidang terhitung ke tabel Anda:
dan sekarang Anda dapat dengan mudah mengelompokkan berdasarkan, memesan berdasarkan dll. berdasarkan hari, bulan atau tahun penjualan:
Bidang-bidang yang dihitung akan selalu tetap terbaru (ketika tanggal "Dibuat" Anda berubah), mereka adalah bagian dari tabel Anda, bidang tersebut dapat digunakan seperti bidang biasa, dan bahkan dapat diindeks (jika "TERTENTU" ) - fitur hebat yang benar-benar kurang dimanfaatkan, IMHO.
Marc
sumber
Untuk oracle kamu bisa
karena ini memotong datetime yang dibuat ke tengah malam sebelumnya.
Pilihan lain adalah
yang mencapai hasil yang sama, tetapi mungkin lebih lambat karena memerlukan konversi jenis.
sumber
Untuk PostgreSQL:
atau menggunakan gips:
jika Anda ingin kecepatan, gunakan opsi kedua dan tambahkan indeks:
sumber
gunakan LINQ
sumber