Как выбрать последнюю запись таблицы в SQL?

133

Это пример кода для выбора всех записей из таблицы. Может ли кто-нибудь показать мне, как выбрать последнюю запись в этой таблице?

select * from table

Когда я использую: SELECT * FROM TABLE ORDER BY ID DESC LIMIT я получаю эту ошибку: Строка 1: неправильный синтаксис рядом с «LIMIT». Это код, который я использую:

private void LastRecord()
{
    SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["HELPDESK_OUTLOOKConnectionString3"].ToString());

    conn.Open();
    SqlDataReader myReader = null;
    SqlCommand myCommand = new SqlCommand("SELECT * FROM HD_AANVRAGEN ORDER BY " +
                "aanvraag_id DESC LIMIT 1", conn);
    myReader = myCommand.ExecuteReader();
    while (myReader.Read())
    {
        TextBox1.Text = (myReader["aanvraag_id"].ToString());
        TextBox1.Text += (myReader["wijziging_nummer"].ToString());
        TextBox1.Text += (myReader["melding_id"].ToString());
        TextBox1.Text += (myReader["aanvraag_titel"].ToString());
        TextBox1.Text += (myReader["aanvraag_omschrijving"].ToString());
        TextBox1.Text += (myReader["doorlooptijd_id"].ToString());
        TextBox1.Text += (myReader["rapporteren"].ToString());
        TextBox1.Text += (myReader["werknemer_id"].ToString());
        TextBox1.Text += (myReader["outlook_id"].ToString());
    }
}
Tassisto
источник
Что ж, надо что-то заказывать. У вас есть первичный ключ? Может быть, ID?
Alexn 04
Что вы имеете в виду под «последней записью»? С наибольшим значением столбца первичного ключа?
Marcin Wroblewski

Ответы:

338

Без какой-либо дополнительной информации, какую базу данных и т. Д. Мы можем сделать лучше всего, например

SQL-сервер

SELECT TOP 1 * FROM Table ORDER BY ID DESC

MySql

SELECT * FROM Table ORDER BY ID DESC LIMIT 1
Адриан Стандер
источник
1
топ-1 возьмет первый, не так ли?
Tassisto 04
30
Да, но именно поэтому вы заказываете по DESC
Адриан Стандер
3
Но если вы использовали заказ по DESC для миллиона записей, это замедлит ваш запрос @AdriaanStander
Чарльз Эрнандес
1
Mysql также работает с sql server. Это общая команда sql.
azhar22k
1
@ itz-azhar: форма MySQL этого запроса не является общей командой SQL; LIMITключевое слово является расширением SQL , что только некоторые RDBMSes реализации; примечательно, что у Oracle нет LIMITключевого слова
landru27
23

Предполагая, что у вас есть столбец Id:

SELECT TOP 1 *
  FROM table
 ORDER
    BY Id DESC;

Кроме того, это будет работать на SQL Server. Я думаю, что MySQL вам может понадобиться:

SELECT *
  FROM table
 ORDER
    BY Id DESC
 LIMIT 1

Но я не уверен в этом на 100%.

РЕДАКТИРОВАТЬ

Глядя на другие ответы, я теперь на 100% уверен, что прав с заявлением MySQL: o)

РЕДАКТИРОВАТЬ

Только что посмотрел ваш последний комментарий. Вы могли:

SELECT MAX(Id)
  FROM table

Это даст вам наивысший номер идентификатора.

Нил Найт
источник
2
ВЫБРАТЬ МАКС (id) ИЗ данных Работает отлично!
Ricardo Fercher
16

чтобы получить последнюю строку в виде SQL-базы данных использовать эту строку SQL:

SELECT * FROM TableName WHERE id=(SELECT max(id) FROM TableName);

Вывод:

Последняя строка вашего БД!

Рикардо Ферчер
источник
3
Также отлично работает с oracle и быстрее, чем сортировка
MaKiPL
Этот лучший. Никакой сортировки, никакого «ТОП 1», только поддерживаемые и эффективные запросы. Отлично.
Мэтт Ф.
7
SELECT * FROM TABLE ORDER BY ID DESC LIMIT 1

Да, это mysql, SQL Server:

SELECT TOP 1 * FROM Table ORDER BY ID DESC
Саймон
источник
это дает ошибку! Я думал, что это SQL, но это MySQL
Tassisto 04
1
Отредактировано для SQL Server, однако вы не указали свою СУБД в вопросе.
Саймон
2

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

Jeje
источник
1

В дизайне таблицы всегда рекомендуется использовать автоматический идентификатор строки, например

 [RowID] [int] IDENTITY(1,1) NOT FOR REPLICATION NOT NULL

, то вы можете определить свою последнюю строку по

 select * from yourTable where rowID =  @@IDENTITY 
Дженна Лиф
источник
1
Это крутой трюк, поскольку более 2
миллионов записей
0

В Oracle вы можете:

SELECT *
FROM (SELECT EMP.*,ROWNUM FROM EMP ORDER BY ROWNUM DESC)
WHERE ROWNUM=1;

Это один из возможных способов.

GeeDee
источник
0
select ADU.itemid, ADU.startdate, internalcostprice 
from ADUITEMINTERNALCOSTPRICE ADU

right join

   (select max(STARTDATE) as Max_date, itemid 
   from ADUITEMINTERNALCOSTPRICE
   group by itemid) as A

on A.ITEMID = ADU.ITEMID
and startdate= Max_date
Panjas51
источник
1
Добро пожаловать в stackoverflow. В дополнение к предоставленному вами ответу, пожалуйста, дайте краткое объяснение того, почему и как это решает проблему.
jtate 08
0

Я думаю, это должно сработать.

declare @x int;
select @x = max(id) from table_name;
select * from where id = @x;
Ханука Фернандо
источник
0

Если у вас есть самоинкрементирующееся поле (скажем ID), вы можете сделать что-то вроде: SELECT * FROM foo WHERE ID = (SELECT max(ID) FROM foo)

Bostone
источник
-1
$sql="SELECT tot_visit FROM visitors WHERE date = DATE(NOW()) - 1 into @s                
$conn->query($sql);
$sql = "INSERT INTO visitors (nbvisit_day,date,tot_visit) VALUES (1,CURRENT_DATE,@s+1)";
$conn->query($sql);
Хани Чарара
источник
вы внимательно прочитали вопрос? как INSERTновое значение соотносится с «как выбрать последнюю запись в этой таблице»?
landru27
2
Добро пожаловать в Stack Overflow! Спасибо за фрагмент кода, который может оказать некоторую немедленную помощь. Правильное объяснение значительно повысило бы его ценность в долгосрочной перспективе , объяснив, почему это хорошее решение проблемы, и сделало бы его более полезным для будущих читателей с другими подобными вопросами. Отредактируйте свой ответ, чтобы добавить пояснения, включая сделанные вами предположения.
sepehr
Не пишите код, специфичный для php, когда OP спрашивает только о языке SQL.
Стив Морец
-1

Вы также можете сделать что-то вроде этого:

SELECT LAST (column_name) AS LAST_CUSTOMER FROM table_name;

vikas95prasad
источник
Следует отметить, что функция last () поддерживается только в MS Access javatpoint.com/sql-select-last
malik masis
-1

Я поддержал Рикардо. На самом деле max намного эффективнее сортировки. Увидеть различия. это отлично.

Мне нужно было получить последнюю строку / запись обновления (timeStamp)

`sqlite> select timeStamp from mypadatav2 order by timeStamp desc limit 1;
 2020-03-11 23:55:00
 Run Time: real 1.806 user 1.689242 sys 0.117062`

`sqlite> select max(timeStamp) from mypadatav2;
 2020-03-11 23:55:00
 Run Time: real 0.553 user 0.412618 sys 0.134340`
user12403395
источник