Mengira Baris mengikut Selang Masa: Mendedahkan Pendekatan Terbaik
Aplikasi sering berurusan dengan peristiwa yang dicap masa dan memerlukan analisis data berdasarkan masa tertentu selang waktu. Untuk mengira bilangan peristiwa dalam setiap selang dengan berkesan, pembangun mungkin memikirkan pelbagai pendekatan.
1. Pertanyaan SQL Dinamik untuk Selang Sewenang-wenang
Menggunakan pertanyaan SQL untuk mengumpulkan acara mengikut selang masa sewenang-wenangnya ialah kaedah yang cekap dan diutamakan. Walau bagaimanapun, Postgres tidak menyokong fungsi ini secara asli.
2. Kaedah Brute Force dengan Isih Masa
Menyoal semua rekod dalam tempoh masa mula/tamat dan mengiranya secara manual mengikut selang masa yang dikehendaki ialah pendekatan yang mudah tetapi menyusahkan. Ia memerlukan pengisihan hasil mengikut cap masa dan tiada penyesuaian selang dinamik.
3. Pra-Penyimpanan Data Selang
Mengekalkan medan berasingan untuk setiap selang dalam jadual acara boleh mengelakkan pengiraan masa jalan dan memudahkan pelaporan. Walau bagaimanapun, kaedah ini menggandakan saiz jadual, yang mungkin tidak optimum.
Amalan Terbaik
Amalan terbaik bergantung pada keperluan khusus aplikasi dan saiz data:
Postgres 14 dengan fungsi date_bin()
Untuk Postgres 14 dan lebih baharu , fungsi date_bin() membenarkan pengumpulan langsung cap masa ke dalam selang waktu. Ini memudahkan pertanyaan dan memberikan hasil yang cekap.
Contoh: Mengira Acara dalam Setiap Selang 15 Minit
Untuk mengira acara dalam setiap selang 15 minit dalam julat masa tertentu menggunakan date_bin() fungsi:
SELECT date_bin('15 min', e.ts, '2018-05-01') AS start_time , count(e.ts) AS events FROM event e GROUP BY 1 ORDER BY 1;
Nota:
Untuk Postgres 13 dan lebih awal, pendekatan alternatif menggunakan generate_series() dan fungsi tetingkap tersedia.
Atas ialah kandungan terperinci Bagaimana untuk Mengira Baris dengan Cekap mengikut Selang Masa dalam SQL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!