1

タイムスタンプ付きの行が 100 万を少し超えるテーブルがあります。均等に分散された 30 行を選択する方法はありますか?

したがって、データ テーブルに 5 つの行が含まれていて、3 つの行が必要な場合、行 1、3、および 5 が返されるようにします。

SQLでこれを行う方法はありますか?

編集:
より具体的には、さまざまな URL のリストを含むテーブルと、URL に関するデータが取得され、定期的な間隔 (私の場合は 1 時間ごと) で保存される別のテーブルがあります。

私がやりたいことは、日付間の間隔が均等で、限られた数のデータ行 (私の場合は 30) を取得できるようにすることです。ある意味では、動的な間隔でデータ ポイントを除外したいと考えています。

それは理にかなっていますか?

4

1 に答える 1

4

このようなことを考えることができると思います..

SELECT * FROM ints;
+---+
| i |
+---+
| 0 |
| 1 |
| 2 |
| 3 |
| 4 |
| 5 |
| 6 |
| 7 |
| 8 |
| 9 |
+---+

ここで、このテーブル全体から約 5 つの均等に分散された結果を返したいとしましょう...

SELECT x.i
  FROM ints x 
  JOIN ints y 
    ON y.i <= x.i 
 GROUP 
    BY i 
HAVING MOD(COUNT(y.i),ROUND((SELECT COUNT(*)/5 FROM ints),0)) = 0; -- where '5' equals the approximate number of results to be returned.
+---+
| i |
+---+
| 1 |
| 3 |
| 5 |
| 7 |
| 9 |
+---+

約であることに注意してください。1m の結果、このソリューションはうまく拡張できません。代わりに、ランキング ビットに変数を使用してください。

于 2013-07-04T12:19:16.480 に答える