2016-11-19 1 views
0

У меня есть столик для учеников и в этой таблице 10 записей. Но я хочу узнать вторую последнюю запись, и у меня есть только имя таблицы, так как я могу найти эту запись?Как найти вторую последнюю запись из таблицы с помощью SQL-запроса?

вот мой запрос.

select * 
from student 
order by primarykey desc LIMIT 1,1 

Заранее спасибо.

+2

Какой тип dbms вы используете? –

+0

В mySQL, который должен работать нормально, он доставит вам вторую последнюю строку. –

+0

Я использую Microsoft SQL Server Management Studio 2012 Jibin Balachandran –

ответ

0

Использование ниже запроса:

select top 1 * from [Your_Table_Name] where [Your_Table_Primary_Name] in 
    (select top 3 [Your_Table_Primary_Name] from [Your_Table_Name] order by 
     [Your_Table_Primary_Name] desc) 
order by [Your_Table_Primary_Name] asc 

Описание


1. сначала нужно выбрать три последних записей с помощью сильфона синтаксиса

select top 3 [Your_Table_Primary_Name] 
from [Your_Table_Name] 
order by [Your_Table_Primary_Name] desc 

2. после затем вы нужно выбрать первую запись с помощью сильфона синтаксиса

select top 1 * 
from [Your_Table_Name] 
where [Your_Table_Primary_Name] in (***First Syntax/Above described Syntax*****) 
order by [Your_Table_Primary_Name] asc 
+2

Использование оконной функции (как показано в ответе Джибина) будет ** намного более эффективным (в современной СУБД). –

1

Должен ли он:

SELECT TOP 1 * FROM 
(SELECT Top 2 * FROM student ORDER BY primarykey DESC) x      
ORDER BY primarykey 
+0

Привет @wraith, вы не очень много объясняете свое решение. –

2

Вы можете сделать это следующим образом:

SELECT * FROM (
       SELECT *,ROW_NUMBER() OVER (PARTITION BY PrimaryKey DESC) AS RN 
       ) X 
WHERE X.RN=2 

Суб запрос будет полностью изменить ваш результат в соответствии с primary key и вернуть row_number() вместе с ним, от этого результирующего набора вы принимаете второй ряд, который будет фактической второй последней пластинкой.

+0

@macmoonshine Это в SQL Server, если запрос mySQL OP правильный. Он должен работать, так как ему нужна вторая последняя строка. –

+0

Это фактически стандартный SQL, он работает во всех СУБД, поддерживающих [современный SQL] (http://modern-sql.com/) - не только SQL Server –

+0

@a_horse_with_no_name Спасибо, я обновил свой ответ. Я не знаю о mySQL, поэтому я не был в этом уверен. –

1

Метод ANSI стандарт SQL является:

select * 
from student 
order by primarykey desc 
offset 1 row 
fetch first 1 row only; 

Это теперь поддерживается во многих, если не большинство, баз данных.