Як вибрати останній запис таблиці в 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());
    }
}

Ну, треба щось замовити. У вас є первинний ключ? Можливо, посвідчення особи?
— alexn

Що ви маєте на увазі під "останнім записом"? З найвищим значенням стовпця первинного ключа?
— Marcin Wroblewski

Відповіді:


337

Без будь-якої додаткової інформації, яка база даних тощо найкраще ми можемо зробити щось подібне

Сервер Sql

SELECT TOP 1 * FROM Table ORDER BY ID DESC

MySql

SELECT * FROM Table ORDER BY ID DESC LIMIT 1

1
перший 1 візьме перший, чи не так?
— Тассісто

30
Так, але саме тому ви замовляєте DESC
— Adriaan Stander

3
Але якщо ви використовували замовлення DESC для мільйона записів, це сповільнить ваш запит @AdriaanStander
— Чарльз Ернандес

1
Myql також працює з sql сервером. Це загальна команда 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%.

EDIT

Дивлячись на інші відповіді, я зараз на 100% впевнений, що я правильно з твердженням MySQL: o)

EDIT

Щойно побачив ваш останній коментар. Ви можете зробити:

SELECT MAX(Id)
  FROM table

Це отримає найвищий ідентифікаційний номер.


2
ВИБІР МАКС (id) З даних Працює ідеально!
— Рікардо Ферчер

15

щоб отримати останню рядок у вигляді SQL-бази даних використовувати цей рядок SQL:

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

Вихід:

Останній рядок вашого db!


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

1
Відредаговано на SQL Server, однак ви не вказали свої СУБД у питанні.
— Simon Simon

3
SELECT * FROM table ORDER BY Id DESC LIMIT 1

2

Останнє - це саме перше, коли ви скасовуєте замовлення.


0

У Oracle ви можете:

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

Це один із можливих способів.


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

1
Ласкаво просимо в stackoverflow. На додаток до наданої вами відповіді, будь ласка, надайте коротке пояснення, чому і як це вирішує проблему.
— jtate

0

Завжди є хорошою практикою в дизайні таблиці мати автоматичний ідентифікатор рядка, наприклад

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

, то ви можете ідентифікувати свій останній рядок за

 select * from yourTable where rowID =  @@IDENTITY 


0

Якщо у вас є самонаростаюче поле (скажіть ID ), ви можете зробити щось на кшталт: SELECT * FROM foo WHERE ID = (SELECT max(ID) FROM foo)


-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
Ласкаво просимо до переповнення стека! Дякуємо за фрагмент коду, який може надати деяку обмежену, негайну допомогу. Правильне пояснення значно покращило б його довгострокове значення , описавши, чому це хороше рішення проблеми, та зробило б кориснішим майбутнім читачам інші подібні запитання. Будь ласка, відредагуйте свою відповідь, щоб додати пояснення, включаючи зроблені вами припущення.
— вересень

Не пишіть специфічний код для php, коли OP запитав лише про мову SQL.
— steve moretz


-1

Я підтримав Рікардо. Насправді макс набагато ефективніше, ніж сортування. Дивіться відмінності. її відмінна.

Мені довелося отримати останній рядок / запис оновлення (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`
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.