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;
I had a similar problem. I needed to get the last version of page content translation, in other words - to get that specific record which has highest number in version column. So I select all records ordered by version and then take the first row from result (by using LIMIT clause).
SELECT *
FROM `page_contents_translations`
ORDER BY version DESC
LIMIT 1
Simple Way To Achieve
I know it's an old question You can also do something like
SELECT * FROM Table WHERE id=1 ORDER BY signin DESC
In above, query the first record will be the most recent record.
For only one record you can use something like
SELECT top(1) * FROM Table WHERE id=1 ORDER BY signin DESC
Above query will only return one latest record.
Cheers!
참고URL : https://stackoverflow.com/questions/8523374/mysql-get-most-recent-record
'IT박스' 카테고리의 다른 글
제네릭 유형의 값을 비교하는 방법은 무엇입니까? (0) | 2020.11.04 |
---|---|
JavaScript의 스크립트 태그에서 JSON을 어떻게 읽을 수 있습니까? (0) | 2020.11.04 |
널 포인터가 모든 비트가 0이 아닐 때 C / C ++ 코드를 올바르게 작성하는 방법 (0) | 2020.11.04 |
Python을 사용하여 볼륨에 남아있는 교차 플랫폼 공간 (0) | 2020.11.04 |
하드웨어 설명 언어 (Verilog, VHDL 등)에 대한 모범 사례는 무엇입니까? (0) | 2020.11.04 |