IT박스

MySQL : 최신 기록 가져 오기

itboxs 2020. 11. 4. 07:47
반응형

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 LASTMySQL이 대부분의 주요 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

반응형