Как найти следующую запись после указанной в SQL?

19
задан Darryl Hein 29 November 2015 в 05:24
поделиться

8 ответов

После редактирования вопроса и упрощения ниже, мы можем изменить его на

SELECT id FROM table WHERE fruit > 'apples' ORDER BY fruit LIMIT 1
33
ответ дан 30 November 2019 в 03:16
поделиться
SELECT * FROM table WHERE id > 1 ORDER BY id LIMIT 1

Еще более простой

ОБНОВЛЕНИЕ:

SELECT * FROM table  WHERE fruit > 'apples' ORDER BY fruit LIMIT 1
7
ответ дан 30 November 2019 в 03:16
поделиться

Настолько простой, и никакая гимнастика потребовал

Select * from Table
where id = 
    (Select Max(id) from Table
     where id < @Id)

или, на основе строки @fruitName = 'яблоки' или 'апельсины' и т.д.

Select * from Table
where id = 
    (Select Max(id) from Table
     where id < (Select id from Table
                 Where fruit = @fruitName))
2
ответ дан 30 November 2019 в 03:16
поделиться

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

1
ответ дан 30 November 2019 в 03:16
поделиться

Это должно работать. Строка 'яблоки' должна будет быть параметром.

Заполняют тот параметр со строкой, и этот запрос возвратит всю запись для первых фруктов после тот объект в алфавитном порядке.

В отличие от ПРЕДЕЛА 1 подход, это должно быть платформенно независимо.

--STEP THREE: Get the full record w/the ID we found in step 2
select *
from 
  fruits fr
 ,(   
  --STEP TWO: Get the ID # of the name we found in step 1
  select
    min(vendor_id) min_id
  from 
    fruits fr1
   ,(
    --STEP ONE: Get the next name after "apples"    
    select min(name) next_name
    from fruits frx
    where frx.name > 'apples'
    ) minval
  where fr1.name = minval.next_name
  ) x
where fr.vendor_id = x.min_id;

эквивалент ПРЕДЕЛУ 1 подход в Oracle (только для ссылки) был бы этим:

select *
from
  (
  select *
  from fruits frx
  where frx.name > 'apples'
  order by name
  )
where rownum = 1
0
ответ дан 30 November 2019 в 03:16
поделиться

Я не знаком с синтаксисом MySQL, но с SQL Server можно сделать что-то с "вершиной", например:

SELECT TOP 1 * FROM table WHERE id > 1 ORDER BY id;

Это предполагает, что идентификационное поле уникально. Если это не уникально (скажите, внешний ключ), можно сделать что-то подобное и затем присоединиться назад против той же таблицы.

, Так как я не использую MySQL, я не уверен в синтаксисе, но предположил бы, что это подобно.

2
ответ дан 30 November 2019 в 03:16
поделиться

Я не знаю MySQL SQL, но я все еще пробую

select n.id 
from   fruit n
,      fruit p
where  n.id = p.id + 1;

редактирование:

select n.id, n.fruitname 
from   fruits n
,      fruits p
where  n.id = p.id + 1;

редактирование два:

Jason Lepack сказал, что это не работает, когда существуют разрывы, и это верно, и я должен считать вопрос лучше.

я должен был использовать аналитику для сортировки результатов на fruitname

select id
,      fruitname
,      lead(id) over (order by fruitname)  id_next
,      lead(fruitname) over (order by fruitname) fruitname_next
from   fruits;
0
ответ дан 30 November 2019 в 03:16
поделиться

Как насчет этого:

Select * from table where id = 1 + 1
-4
ответ дан 30 November 2019 в 03:16
поделиться
Другие вопросы по тегам:

Похожие вопросы: