2015-07-22 6 views
2

У меня есть таблица людей:SQL: самый эффективный способ получить номер строки из одного элемента

id | Name | Age 
1 | Alex | 18 
2 | Peter| 30 
3 | Zack | 25 
4 | Bim | 30 
5 | Ken | 20 

И у меня есть следующий интервал строк: WHERE ID>1 AND ID<5. Я знаю, что в этом интервале есть человек, чей id = 3. Каков наиболее эффективный (самый быстрый) способ получить номер строки в этом интервале (в моем примере rownumber = 2)? Я имею в виду, что мне не нужны никакие другие данные. Мне нужно только одно - узнать позицию строки человека с id = 3 в интервале WHERE ID>1 AND ID<5.

Если возможно, я хотел бы получить не конкретное решение для конкретного поставщика, а общее решение sql. Если это невозможно, мне нужно решение для postgresql и h2.

ответ

3

Номер строки будет числом строк между первой строкой в ​​интервале и строкой, которую вы ищете. Для интервала ID>1 AND ID<5 и целевой строки ID=3, это:

select count(*) 
from YourTable 
where id between 2 and 3 

Для интервала ID>314 AND ID<1592 и целевой строки ID=1000, вы будете использовать:

where id between 315 and 1000 

Чтобы быть уверенным, что есть элемент с ID=3, используйте :

select count(*) 
from YourTable 
where id between 2 and 
     (
     select id 
     from YourTable 
     where id = 3 
     ) 

Это вернет 0, если строка не существует.

+0

спасибо. Отличное решение. Но если я ошибаюсь и нет элемента с id = 3 в этом интервале, как я его узнаю? –

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