seperti ketika saya melakukannya
SELECT [Date]
FROM [FRIIB].[dbo].[ArchiveAnalog]
GROUP BY [Date]
bagaimana saya bisa menentukan periode grup?
MS SQL 2008
Edit ke-2
Saya mencoba
SELECT MIN([Date]) AS RecT, AVG(Value)
FROM [FRIIB].[dbo].[ArchiveAnalog]
GROUP BY (DATEPART(MINUTE, [Date]) / 10)
ORDER BY RecT
diubah% 10 menjadi / 10. mungkinkah membuat output Date tanpa milidetik?
ROUND((DATEPART(MINUTE, DT.[Date]) / 5),0,1) * 5
, sehingga ketika saya melihat data itu berkorelasi dengan slot waktu terdekatDATE(DT.[Date])
.datepart(hour, workingPolicy.workingHours)/2.0
memberi1.5
sambildatepart(hour, '1900-01-01 09:00:30.000')/2.0
memberi4.5
, saya tidak mengerti mengapa? Catatan: workingPolicy.workingHours = 1900-01-01 09: 00: 30.000 . tolong bantuSaya sangat terlambat ke pesta, tetapi ini tidak muncul di salah satu jawaban yang ada:
10
danMINUTE
dapat diubah ke nomor apa saja danDATEPART
, masing-masing.DATETIME
nilai, yang berarti:SELECT
pernyataan akan memberikan kolom output dengan output cantik terpotong pada tingkat yang Anda tentukan.'2000'
adalah "jangkar tanggal" di mana SQL akan melakukan matematika tanggal. Jereonh menemukan di bawah ini bahwa Anda menemukan bilangan bulat bilangan bulat dengan jangkar sebelumnya (0
) ketika Anda mengelompokkan tanggal terbaru dengan detik atau milidetik. †Jika data Anda membentang berabad-abad, ‡ menggunakan tanggal jangkar tunggal untuk pengelompokan detik atau milidetik masih akan menghadapi overflow. Jika itu terjadi, Anda dapat meminta setiap baris untuk mengaitkan perbandingan binning dengan tengah malam tanggalnya sendiri:
Gunakan
DATEADD(DAY, DATEDIFF(DAY, 0, aa.[date]), 0)
alih-alih'2000'
dimanapun itu muncul di atas. Permintaan Anda akan benar-benar tidak dapat dibaca, tetapi itu akan berhasil.Alternatif mungkin
CONVERT(DATETIME, CONVERT(DATE, aa.[date]))
sebagai pengganti.† 2 32 ≈ 4.29E + 9, jadi jika Anda
DATEPART
yaituSECOND
, Anda mendapatkan 4,3 miliar detik di kedua sisi, atau "anchor ± 136 tahun." Demikian pula, 2 32 milidetik adalah ≈ 49,7 hari.‡ Jika data Anda benar-benar mencakup berabad-abad atau milenia dan masih akurat hingga detik atau milidetik ... selamat! Apa pun yang Anda lakukan, terus lakukan.
sumber
where
klausa sebelumgroup by
./ 20 * 20
sama dengan mengumpulkan data untuk interval 20 menit? Maaf, saya sedang berjuang untuk matematika sekarang.The datediff function resulted in an overflow. The number of dateparts separating two date/time instances is too large. Try to use datediff with a less precise datepart.
). Tampaknya MINUTE adalah bagian data terkecil yang dapat Anda gunakan dengan pendekatan ini.0
ke'2000'
(kutipan itu penting!) dan cobaSECOND
lagi.Di T-SQL Anda dapat:
atau
dengan penggunaan menit
DATEPART(mi, [Date])
atau
dengan 10 menit penggunaan
DATEPART(mi, [Date]) / 10
(seperti yang disarankan Timothy)sumber
Untuk interval 10 menit, Anda akan melakukannya
Seperti yang telah disebutkan oleh tzup dan Pieter888 ... untuk melakukan interval satu jam, adil
sumber
Seharusnya seperti itu
(Tidak 100% yakin tentang sintaksisnya - saya lebih seperti tipe orang Oracle)
Di Oracle:
sumber
Jawaban asli yang diberikan penulis bekerja dengan sangat baik. Hanya untuk memperluas ide ini, Anda dapat melakukan sesuatu seperti
yang akan memungkinkan Anda untuk mengelompokkan dalam jangka waktu lebih lama dari 60 menit, katakan 720, yang setengah hari dll
sumber
Untuk MySql:
sumber
Solusi saya adalah menggunakan fungsi untuk membuat tabel dengan interval tanggal dan kemudian bergabung dengan tabel ini ke data yang ingin saya kelompokkan menggunakan interval tanggal dalam tabel. Interval tanggal kemudian dapat dengan mudah dipilih saat menyajikan data.
sumber
sumber
Untuk SQL Server 2012, meskipun saya percaya ini akan bekerja di SQL Server 2008R2, saya menggunakan pendekatan berikut untuk mendapatkan waktu mengiris milidetik:
Ini bekerja dengan:
@ms = DATEDIFF(MILLISECOND, CAST(time AS DATE), time)
@rms = @ms % @msPerSlice
DATEADD(MILLISECOND, -@rms, time)
Sayangnya, seperti ini meluap dengan mikrodetik dan unit yang lebih kecil, sehingga set data yang lebih besar dan lebih halus perlu menggunakan titik tetap yang kurang nyaman.
Saya belum menentukan dengan seksama hal ini dan saya tidak berada dalam data besar, jadi jarak tempuh Anda dapat bervariasi, tetapi kinerjanya tidak jauh lebih buruk daripada metode lain yang dicoba pada peralatan dan set data kami, dan pembayaran dalam kenyamanan pengembang untuk pemotongan secara sewenang-wenang membuatnya berharga. untuk kita.
sumber
ganti dua 600 dengan jumlah detik yang Anda inginkan untuk dikelompokkan.
Jika Anda sering membutuhkan ini dan tabelnya tidak berubah, seperti yang disarankan oleh Arsip, mungkin akan sedikit lebih cepat untuk mengonversi dan menyimpan tanggal (& waktu) sebagai waktu tidakix dalam tabel.
sumber
Saya tahu saya terlambat ke pertunjukan dengan yang ini, tapi saya menggunakan ini - pendekatan yang cukup sederhana. Ini memungkinkan Anda untuk mendapatkan irisan 60 menit tanpa masalah pembulatan.
sumber
sumber