Проблема запроса SQL Server с верхом и порядок по - PullRequest
0 голосов
/ 11 октября 2019

Я новичок в SQL, и у меня возникла проблема с предложением top и order by.

Мои данные

id  name
------------
1   a
2   b
4   ccc
6   aaaaaa

, и у меня есть запрос

select top 1 
    *
from
    (select top 2 
         *
     from 
         testing2) t
order by 
    id desc

Результат

id  name
-----------
6   aaaaaa

Я не знаю, почему он печатает последнюю запись.

Вот мои мысли по поводу запроса:

Сначала я хочуизвлечь вторую запись из таблицы. Так как он уже отсортирован по id, мне не нужен порядок по внутреннему запросу. Таким образом, внутренний запрос вернет

1  a
2  b

Затем я использую top 1 и order by desc для получения второй записи.

Очевидно, я ошибаюсь. Я знаю решение, добавив порядок во внутреннем запросе.

Но я хочу знать, почему, и шаг выполнения этого запроса в базе данных.

1 Ответ

1 голос
/ 11 октября 2019

Вам нужно order by в подзапросе. В противном случае строки являются неупорядоченными и могут быть возвращены любые строки:

select top 1 *
from (select top 2 *
      from testing2
      order by id asc
     ) t
order by id desc;

Конечно, fetch упрощает это:

select t.*
from testing t
order by id asc
offset 1 row fetch first 1 row only;
...