データベースに、時間ごとのログデータを格納するテーブルがあります。1日で、データベースに100万行が存在する可能性があります。時間は一定の間隔ではありません。時間を含むいくつかのインデックスがあります。私がやりたいのは、時間間隔ごとに1行の行のセットを返すクエリを作成することです。たとえば、1日15分ごとに1行を返すクエリを実行できます。これにより、24 * 60=96行が返されます。返される各行は、実際には、要求された間隔の前のデータベース内の最も近い行になります(データベース内のデータは要求された間隔と等しくないため)。
私はそれをどうやってやるのか途方に暮れています。ギガバイトを超えるデータをメモリにロードするのは遅すぎるため、特定のインデックスのセットと時間間隔についてすべての行をクエリすることはできません。SQLを使用してこれを行う効率的な方法はありますか?MySQLデータベースを使用しています。テーブルのインデックスなどを変更することもできます...
TIME
11:58
12:03
12:07
12:09
12:22
12:27
12:33
12:38
12:43
12:49
12:55
これを12:00から1:00までの15分間隔でクエリしたい場合は、次のようになります。
11:58 (nearest 12:00)
12:09 (nearest 12:15)
12:27 (nearest 12:30)
12:43 (nearest 12:45)
12:55 (nearest 1:00)
簡単にできる場合は、時間を数値として保存することもできます(つまり、1970年からのミリ秒)。上記のクエリでは、これは900000ミリ秒の間隔になります。