[mysql] MySQL : 최신 기록 가져 오기
아래 표에서 3 개 레코드가 아닌 로그인 열 을 기준으로 가장 최근 레코드 만 가져 오려면 어떻게해야 id=1
합니까?
+----+---------------------+---------+
| id | signin | signout |
+----+---------------------+---------+
| 1 | 2011-12-12 09:27:24 | NULL |
| 1 | 2011-12-13 09:27:31 | NULL |
| 1 | 2011-12-14 09:27:34 | NULL |
| 2 | 2011-12-14 09:28:21 | NULL |
+----+---------------------+---------+
답변
MAX(signin)
ID별로 그룹화 된 집계를 사용하십시오 . signin
각에 대한 최신 목록이 표시됩니다 id
.
SELECT
id,
MAX(signin) AS most_recent_signin
FROM tbl
GROUP BY id
전체 단일 레코드를 얻으려면 per id INNER JOIN
만 반환하는 하위 쿼리에 대해를 수행하십시오 MAX(signin)
.
SELECT
tbl.id,
signin,
signout
FROM tbl
INNER JOIN (
SELECT id, MAX(signin) AS maxsign FROM tbl GROUP BY id
) ms ON tbl.id = ms.id AND signin = maxsign
WHERE tbl.id=1
답변
SELECT *
FROM tbl
WHERE id = 1
ORDER BY signin DESC
LIMIT 1;
명백한 색인은 on (id)
또는 여러 열 색인이 됩니다.(id, signin DESC)
.
이 경우에 편리하게 MySQL은 NULL
값 을 내림차순으로 마지막 으로 정렬 합니다 . NULL
값 이있을 수있는 경우 일반적으로 원하는 것 입니다. 최신 not-null이있는 행입니다 signin
.
NULL
먼저 값 을 얻으려면 :
ORDER BY signin IS NOT NULL, signin DESC
관련 :
SQL 표준은 NULL
값에 대한 기본 정렬 순서를 명시 적으로 정의하지 않습니다 . 동작은 RDBMS에 따라 상당히 다릅니다. 보다:
그러나이 있다NULLS FIRST
/의 NULLS LAST
MySQL이 대부분의 주요 RDBMS하여 SQL 표준에 정의 및 지원 조항,하지만은. 보다:
답변
@xQbert의 답변을 바탕으로 하위 쿼리를 피하고 모든 ID로 필터링 할 수있을만큼 일반화 할 수 있습니다.
SELECT id, signin, signout
FROM dTable
INNER JOIN(
SELECT id, MAX(signin) AS signin
FROM dTable
GROUP BY id
) AS t1 USING(id, signin)
답변
Select [insert your fields here]
from tablename
where signin = (select max(signin) from tablename where ID = 1)
답변
SELECT * FROM (SELECT * FROM tb1 ORDER BY signin DESC) GROUP BY id;
답변
비슷한 문제가있었습니다. 즉, 버전 열에서 가장 높은 번호를 가진 특정 레코드를 얻으려면 페이지 콘텐츠 번역의 마지막 버전을 가져와야했습니다. 따라서 버전별로 정렬 된 모든 레코드를 선택한 다음 결과에서 첫 번째 행을 가져옵니다 (LIMIT 절 사용).
SELECT *
FROM `page_contents_translations`
ORDER BY version DESC
LIMIT 1
답변
달성하는 간단한 방법
나는 그것이 오래된 질문이라는 것을 안다. 당신은 또한 다음과 같은 것을 할 수 있습니다.
SELECT * FROM Table WHERE id=1 ORDER BY signin DESC
위에서 첫 번째 레코드를 쿼리하면 가장 최근 레코드가됩니다.
하나의 레코드에만 다음과 같은 것을 사용할 수 있습니다.
SELECT top(1) * FROM Table WHERE id=1 ORDER BY signin DESC
위의 쿼리는 하나의 최신 레코드 만 반환합니다.
건배!