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());
    }
}

글쎄, 당신은 뭔가를 주문해야합니다. 기본 키가 있습니까? 아마도 ID?
alexn

"마지막 기록"이란 무엇입니까? 기본 키 열이 가장 높은가?
Marcin Wroblewski

답변:


337

더 이상의 정보가 없다면, 우리가 할 수있는 최선의 데이터베이스 등은

SQL Server

SELECT TOP 1 * FROM Table ORDER BY ID DESC

MySql

SELECT * FROM Table ORDER BY ID DESC LIMIT 1

1
상위 1 개는 첫 번째 것이 아닌가?
Tassisto

30
네, 그러나 그것이 당신이 DESC
Adriaan Stander에서

3
당신 만의 기록을 위해 DESC로 주문을 사용하는 경우 그것은 쿼리 @AdriaanStander 둔화
찰스 에르난데스

1
mysql은 SQL Server 와도 작동합니다. 일반적인 sql 명령입니다.
azhar22k 2016 년

1
@ itz-azhar :이 쿼리의 MySQL 형식은 일반적인 SQL 명령 이 아닙니다 . LIMIT키워드는 어떤 RDBMS에서이 구현하는 것이 SQL의 확장; 특히, 오라클은 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 % 확신하지 못합니다.

편집하다

다른 답변을 살펴보면 이제 MySQL 진술에 정확하다고 확신합니다. : o)

편집하다

최근 댓글을 보았습니다. 당신은 할 수 있습니다 :

SELECT MAX(Id)
  FROM table

이것은 당신에게 가장 높은 ID 번호를 얻을 것입니다.


2
SELECT MAX (id) FROM data 완벽하게 작동합니다!
Ricardo Fercher

15

마지막 얻기 위해 SQL 데이터베이스은 이 SQL 문자열을 사용 :

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

산출:

DB의 마지막 줄!


3
오라클에서도 완벽하게 작동하며 정렬보다 빠릅니다.
MaKiPL

이것은 최고입니다. 정렬 없음, "TOP 1"없음, 지원 및 수행 쿼리. 완전한.
Matt F.

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로 편집되었지만 질문에 DBMS를 지정하지 않았습니다.
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

나는 이것이해야한다고 생각합니다.

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)


-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
스택 오버플로에 오신 것을 환영합니다! 제한적이고 즉각적인 도움을 줄 수있는 코드 스 니펫에 감사드립니다. 적절한 설명은 왜 이것이 문제에 대한 좋은 해결책인지 설명함으로써 장기적인 가치 를 크게 향상시킬 것이며 , 다른 비슷한 질문을 가진 미래 독자들에게 더 유용 할 것입니다. 가정을 포함하여 설명을 추가하려면 답변을 수정하십시오.
sepehr

OP가 SQL 언어에 대해서만 물었을 때 PHP 특정 코드를 작성하지 마십시오.
스티브는 moretz


-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`
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.