Найти пару записей с минимальным расстоянием

Evgeny Melnik
Дата: 30.12.2015 15:52:42
Помогите составить запрос
Есть база
ID t1 t2
1 a 11
2 b 16
3 x 18
4 t 25
5 e 11
6 t 19
7 j 32

нужно найти пару записей (например для т2=11 и т2=32), причем расстояние должно быть минимальным и между ними не должно встречаться т1=х. Т.е. в данном случае нужно найти записи с ID 5 и 7.
sdku
Дата: 30.12.2015 16:39:34
Evgeny Melnik,
Почему не id=1, а id=5 (каков критерий отбора)
и поясните это:
Evgeny Melnik
....причем расстояние должно быть минимальным и между ними не должно встречаться т1=х....
чему равен Х
Evgeny Melnik
Дата: 30.12.2015 17:13:47
sdku, есть пара значений 3го столбца (например 11 и 32). Мне нужно выбрать пару записей базы, с наименьшим количеством записей между ними. В данном примере есть две пары со значениями 3го столбца 11 и 32: строки 1, 7 и строки 5, 7. Нужно выбрать 5, 7 так как между ними меньше записей. Дополнительное условие - отсутствие в диапазоне значения "х" во втором столбце. После мне нужно будет сложить все строки 2го столбца в одну строку. Т.е. здесь мне надо будет получить строку "etj"
guest_rusimport
Дата: 30.12.2015 22:34:37
Evgeny Melnik,
при условии , что ID непрерывно возрастает
Evgeny Melnik
Дата: 04.01.2016 23:44:01
select top 1 id1, id2  from
(
select 
[1].id  as id1, 
[2].id as id2,
abs([1].id-[2].id) as s,
(SELECT count(*) FROM tblCube WHERE turn='X' and tblCube.ID between [1].id  and [2].id) as X
from tblCube as [1]
inner join
tblCube as [2]
on ([1].after like '????1???????????2??????????4??????????????5?????6????6' 
and
[2].after like '????1???????????2???????????????????????????????6?????'
and
[1].id<>[2].id)
) AS [3]
where X=0 and 
s=(select min(s) from [3])


ругается что ядру субд не удается найти входную таблицу или запрос 3.
Что может быть не так?
непоймучка
Дата: 04.01.2016 23:57:43
Evgeny Melnik
select top 1 id1, id2  from
(
select 
[1].id  as id1, 
[2].id as id2,
abs([1].id-[2].id) as s,
(SELECT count(*) FROM tblCube WHERE turn='X' and tblCube.ID between [1].id  and [2].id) as X
from tblCube as [1]
inner join
tblCube as [2]
on ([1].after like '????1???????????2??????????4??????????????5?????6????6' 
and
[2].after like '????1???????????2???????????????????????????????6?????'
and
[1].id<>[2].id)
) AS [3]
where X=0 and 
s=(select min(s) from [3])


ругается что ядру субд не удается найти входную таблицу или запрос 3.
Что может быть не так?

вот это: select min(s) from [3] хочет выбирать из таблицы/запроса с именем 3

если у вас такой таблицы нет, и вы имели в виду тот же [3], с которым у вас выше написан подзапрос, то так не выйдет - чтобы повторно использовать подзапрос в запросе, придется повторить там его текст еще раз. ну либо сделать сохраненный запрос - и тогда в основном запросе к нему можно обращаться несколько раз, да.