У меня есть следующая таблица с данными
id | COL1
=========
1 | b
2 | z
3 | b
4 | c
5 | b
6 | a
7 | b
8 | c
9 | a
Итак, я знаю идентификатор «z» (ID = 2) в таблице, и я назову его Z_ID. Мне нужно получить строки между «а» и «с» (в том числе «а» и «с»). Это должно быть первое «a» после Z_ID. 'c' должно идти после Z_ID и после 'a', которое я нашел ранее.
Результат, который я ищу:
id | COL1
=========
6 | a
7 | b
8 | c
Мой SELECT выглядит следующим образом
SELECT *
FROM table
WHERE id >= (
SELECT MIN(ID)
FROM table
WHERE COL1 = 'a' AND ID > 2
)
AND id <= (
SELECT MIN(ID)
FROM table
WHERE COL1 = 'c'AND ID > 2 and ID > (
SELECT MIN(ID)
FROM table
WHERE COL1 = 'a' AND ID > 2
)
)
Я получаю желаемый результат. Но я беспокоюсь о производительности, потому что я использую один и тот же подзапрос два раза. Есть ли способ повторно использовать результат из первого подзапроса? Может быть, есть более чистый способ получить нужный мне результат?