답변:
부속 선택을 사용할 수 있습니다.
SELECT row
FROM table
WHERE id=(
SELECT max(id) FROM table
)
의 값이 max(id)
고유하지 않으면 여러 행이 반환됩니다.
그러한 행을 하나만 원하면 @MichaelMior의 답변을 사용하십시오.
SELECT row from table ORDER BY id DESC LIMIT 1
id
테이블의 열입니다. id
열의 값 이 고유해야 한다는 보장은 없습니다 .
id
기본 또는 고유 키가 아니라고 가정 :) 이름이 주어지면 합리적 일 가능성이 있습니다. 또한 사용중인 DBMS에 따라 subselect를 사용한 접근 방식이 훨씬 덜 효율적일 수 있습니다.
id
외래 키일 수 있으며,이 경우 고유하지 않을 수 있습니다. 나는 일부 벤치마킹을 사용 set profiling = 1; ...; show profiles
했고 우리의 솔루션은 MySQL을 사용하는 것과 동일한 성능을 보입니다. 내 자신의 지식으로, DBMS가 하위 선택에 대한 성능이 떨어지는 것을 알고 있습니까?
당신은 또한 할 수 있습니다
SELECT row FROM table ORDER BY id DESC LIMIT 1;
ID별로 내림차순으로 행을 정렬하고 첫 번째 행을 반환합니다. 이것은 최대 ID를 가진 행을 반환하는 것과 같습니다. 물론 이것은 id
모든 행에서 고유 하다고 가정합니다 . 그렇지 않으면 최대 값을 가진 여러 행이있을 수 있으며 id
하나만 얻을 수 있습니다.
SELECT *
FROM table
WHERE id = (SELECT MAX(id) FROM TABLE)
SELECT entry FROM table WHERE id = MAX(id)
가 작동하지 않습니까 ?!
SELECT entry_time FROM users_unverified WHERE num_id = (SELECT MAX(num_id) FROM users_unverified WHERE account_email = :account_email)
필요 entry_time
합니다. 그 진술은 충분합니까 아니면 다음과 같아야합니다.SELECT entry_time FROM users_unverified WHERE num_id = (SELECT MAX(num_id) FROM users_unverified) AND account_email = :account_email
테이블에 "전체 스캔"이 order by
있기 때문에 줄 수 없습니다 order by
.
다음 쿼리가 더 좋습니다.
SELECT * FROM table WHERE id = (SELECT MAX(id) FROM table);
ORDER BY
id
이것이 테이블의 기본 키 라고 가정하면 전체 스캔을 수행하지 않습니다 . 그렇지 않은 경우 이름이 잘못 지정됩니다. 그렇지 MAX(id)
않은 경우 전체 테이블 스캔없이 어떻게 작업 할 수 있습니까? 인덱스가 없으면 최대 값을 찾기 위해 모든 값을 계속 확인해야합니다.
이것으로 시도
SELECT top 1 id, Col2, row_number() over (order by id desc) FROM Table