2012-09-20 3 views
1

Кортежи в моей таблице выглядят так: (значение, дата, атрибут). Теперь я хочу запросить базу данных и получить диапазон, но не в зависимости от даты, а от числа «последние х записей в диапазоне ...». Следующий пример должен пояснить: у меня есть панель времени, где все записи с атрибутом = «x» упорядочены по столбцу даты, поэтому дата точек s и t меньше, чем дата в точке 0 и дата в точке x и y, конечно, больше, чем в точке 0. Все точки имеют атрибут = "a".Как определить запрос диапазона в зависимости от количества?

 s  t 0 x  y 
------|--------|--|--|--------|------> t 

Теперь я хочу, чтобы получить все записи со следующими характеристиками: Получить все записи с - т и х - у, где атрибут = «а» и выбрать с и т таким образом, что я получаю 60 записей в этом диапазоне выберите t таким образом, чтобы 5 записей находились между t и 0 и x и y соответственно.

Вот образец данных:

(xyz, 01.02.2000, a) 
(xyz, 02.02.2000, a) 
(xyz, 01.02.2000, b) 
(xyz, 03.02.2000, a) 
(xyz, 01.02.2000, b) 
(xyz, 04.02.2000, a) 
(xyz, 06.02.2000, a) 
(xyz, 01.02.2000, b) 
(xyz, 07.02.2000, a) 
(xyz, 01.02.2000, b) 
(xyz, 10.02.2000, a) 
(xyz, 12.02.2000, a) 

Нужный выход для даты = 06.02.2000 и диапазон й = 3, т-0 = 1 будет

s = (xyz, 01.02.2000, a) 
(xyz, 02.02.2000, a) 
t = (xyz, 03.02.2000, a) 
(xyz, 04.02.2000, a) NOT because between t and 0 should be 1 free 
0 = (xyz, 06.02.2000, a) 

И в другом направление, «правое» направление на временной шкале точно такое же ...

В настоящее время я использую два запроса с порядком по дате и ограничениям (5, 60), но я бы предположил, что есть лучший способ ... Я только этого не знаю way ;-)

+0

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

ответ

0

Я думаю, что единственный практический способ - использовать СОЮЗ между двумя запросами LIMIT, один отсортированный в порядке возрастания, другой в порядке убывания. Это также потому, что нет гарантии, что в любом из двух интервалов есть желаемое количество строк.

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