복붙노트

[SQL] MySQL은 : 가져 오기 가장 최근의 기록

SQL

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    |
+----+---------------------+---------+

해결법

  1. ==============================

    1.ID별로 그룹화 집합 MAX (로그인 절차)를 사용합니다. 이것은 각 ID에 대한 가장 최근의 로그인 절차를 나열합니다.

    ID별로 그룹화 집합 MAX (로그인 절차)를 사용합니다. 이것은 각 ID에 대한 가장 최근의 로그인 절차를 나열합니다.

    SELECT 
     id, 
     MAX(signin) AS most_recent_signin
    FROM tbl
    GROUP BY id
    

    전체 단일 레코드를 얻으려면, 내부는 ID 당에만 MAX (로그인 절차를) 반환하는 하위 쿼리에 가입 수행합니다.

    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
    
  2. ==============================

    2.

    SELECT *
    FROM   tbl
    WHERE  id = 1
    ORDER  BY signin DESC
    LIMIT  1;
    

    명백한 지수 (ID)에, 또는 (DESC 로그인의 아이디)에 멀티 컬럼 인덱스 것이다.

    편리 경우에, MySQL은 내림차순으로 마지막 NULL 값을 정렬합니다. NULL 값이 될 수 있다면 당신은 일반적으로 원하는 무엇을 그 : 최신하지 null이 로그인 절차 인 행.

    NULL 값을 먼저 얻으려면 :

    ORDER BY signin IS NOT NULL, signin DESC
    

    관련 :

    표준 SQL 명시 적으로 NULL 값에 대한 기본 정렬 순서를 정의하지 않습니다. 동작은 다른 RDBMS에 걸쳐 상당히 다릅니다. 보다:

    그러나 MySQL을로 NULLS FIRST / NULLS LAST의 대부분의 주요 RDBMS하여 SQL 표준에 정의 및 지원 조항,하지만이 있습니다. 보다:

  3. ==============================

    3.xQbert의 대답은 @에 구축, 당신은 하위 쿼리를 방지하고 ID에 의해 필터에 일반적인 충분히 만들 수 있습니다

    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)
    
  4. ==============================

    4.

    Select [insert your fields here]
    from tablename 
    where signin = (select max(signin) from tablename where ID = 1)
    
  5. ==============================

    5.

    SELECT * FROM (SELECT * FROM tb1 ORDER BY signin DESC) GROUP BY id;
    
  6. ==============================

    6.나는 비슷한 문제가 있었다. 버전 열에서 가장 높은 번호가 특정 기록을 얻기 위해 - 나는 즉, 페이지 내용 번역의 마지막 버전을 할 필요가 있었다. 나는 버전에서 주문한 모든 레코드를 선택하고 결과에서 (LIMIT 절을 사용하여) 첫 번째 행을 그래서.

    나는 비슷한 문제가 있었다. 버전 열에서 가장 높은 번호가 특정 기록을 얻기 위해 - 나는 즉, 페이지 내용 번역의 마지막 버전을 할 필요가 있었다. 나는 버전에서 주문한 모든 레코드를 선택하고 결과에서 (LIMIT 절을 사용하여) 첫 번째 행을 그래서.

    SELECT *
    FROM `page_contents_translations`
    ORDER BY version DESC
    LIMIT 1
    
  7. ==============================

    7.달성하는 간단한 방법

    달성하는 간단한 방법

    나는이 오래된 질문 알아요 당신은 또한 같은 뭔가를 할 수

    SELECT * FROM Table WHERE id=1 ORDER BY signin DESC
    

    이상에서, 쿼리 첫 번째 레코드는 가장 최근에 기록 될 것입니다.

    하나 개의 레코드 만 들어 당신은 같은 것을 사용할 수 있습니다

    SELECT top(1) * FROM Table WHERE id=1 ORDER BY signin DESC
    

    위 쿼리는 하나 개의 최신 기록을 반환합니다.

    건배!

  8. from https://stackoverflow.com/questions/8523374/mysql-get-most-recent-record by cc-by-sa and MIT license