Saya sangat terlambat ke pesta, tetapi ini tidak muncul di salah satu jawaban yang ada:
GROUP BY DATEADD(MINUTE, DATEDIFF(MINUTE, '2000', date_column) / 10 * 10, '2000')
- Ketentuan
10
dan MINUTE
dapat diubah ke nomor apa saja dan DATEPART
, masing-masing.
- Ini adalah
DATETIME
nilai, yang berarti:
- Ini berfungsi dengan baik di interval waktu yang lama. (Tidak ada tabrakan antara tahun.)
- Menyertakannya dalam
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. †
SELECT DATEADD(MINUTE, DATEDIFF(MINUTE, '2000', aa.[date]) / 10 * 10, '2000')
AS [date_truncated],
COUNT(*) AS [records_in_interval],
AVG(aa.[value]) AS [average_value]
FROM [friib].[dbo].[archive_analog] AS aa
GROUP BY DATEADD(MINUTE, DATEDIFF(MINUTE, '2000', aa.[date]) / 10 * 10, '2000')
ORDER BY [date_truncated]
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
yaitu SECOND
, 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.
ROUND((DATEPART(MINUTE, DT.[Date]) / 5),0,1) * 5
, sehingga ketika saya melihat data itu berkorelasi dengan slot waktu terdekat