どのように私は、MySQL内のすべてのn行を取得することができますか?
質問
私は、データが毎分記録含むテーブルを持っているので、私は毎分の行を有します。処理のためにデータを返す場合、この精度は、最後の6時間のために必要とされるが、その後、精度の低いレベルは、例えば、十分です5分ごとます。
私は配列にすべてのデータを返却し、すべてが、すべての5番目の要素を削除するが、それは最初の配列に読み込む、その後のMySQLで返さにすべてのデータを必要とすることができます - 。データのかなり多くを
どのように私は、MySQL内のすべてのn番目の行を返すことができますか?私は読んだことがある使用することを提案している。こののブログ記事主キー%5 = 0主キーはAUTO_INCREMENTであるが、この
a)のインデックスを使用していません B)のみ5で割り切れる主キーの値を返し、欠失の場合には、実際に
すべての5行目ではないかもしれませんこのだけのSQLクエリ内で行うことができますか、カーソルを使用して結果セットを行ごとにループする必要がありますか?
私はDBに接続するためにPHPで MySQLiをするを使用しています。
解決
タイムスタンプのリスト5分ごとます:
SELECT
MIN(logtimestamp) AS first_of_five_minutes
FROM tLog
GROUP BY
DATE(logtimestamp),
HOUR(logtimestamp),
MINUTE(logtimestamp) - (MINUTE(logtimestamp) % 5)
さて、あなたは上logtimestamps
するfirst_of_five_minutes
を結ぶことにより、要求されたログエントリを取得するには、サブ選択としてこれを使用することができます。もちろん、追加のWHERE
-句を使用すると、「右」のタイムスタンプを取得するように、内側と外側に複製する必要があります。
また、これは直接minutes%5 = 0
を使用したソリューションは、唯一の倍数に実際にあるLOGENTRIES戻るwherasごとに5分間隔での最初のタイムスタンプを返すことに注意してください。あなたが記録ログまたは類似の遅延を持っている場合は失敗する可能性がある、05
他のヒント
完全にテストされていないが、これはうまくいくかもしれない。
SELECT Row, col_a
FROM (SELECT @row := @row + 1 AS Row, col1 AS col_a FROM table1) As derived1
WHERE Row%5 = 0;