2013-07-04 5 views
1

У меня есть таблица с чуть более чем миллиметровыми строками, есть ли способ выбрать 30 строк, которые равномерно распределены?SQL для выбора строк, распределенных с течением времени

Так что, если моя таблица данных содержит пять строк, и мне нужно три, я хочу вернуть строки 1, 3 и 5.

Есть ли способ сделать это в SQL?

Редактировать:
В частности, у меня есть таблица со списком разных URL-адресов и другая таблица, в которой данные о URL-адресах выбираются и сохраняются с регулярными интервалами (в моем случае ежечасно).

Что я хочу сделать, так это возможность получить ограниченное количество строк данных (в моем случае 30) с четным интервалом между датами. В некотором смысле я хочу отфильтровать точки данных с динамическим интервалом.

Это имеет смысл?

+1

Пожалуйста, добавьте структуру таблицы, данные примера, ожидаемый результат и где именно вы застряли. –

+0

Являются ли временные метки на вашем столе равномерно распределенными? –

+0

В основном дистрибуция - это административная работа с базой данных, которая будет учитываться при вставке записей. Если вы вставляете с соответствующим порядком, то ваши записи будут равномерно распределены. Я не понимаю вашего требования четко. – Mari

ответ

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 | 
+---+ 

Обратите внимание, что в ca. 1 м, это решение НЕ будет хорошо масштабироваться. Вместо этого используйте переменные для ранжирования.

+0

Это определенно похоже на то, что я ищу, спасибо. – AmusableLemur

Смежные вопросы