[SQL] MySQL은 : 가져 오기 가장 최근의 기록
SQLMySQL은 : 가져 오기 가장 최근의 기록
아래 표에서 어떻게이 로그인의 열 및 모든 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.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.
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.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.
Select [insert your fields here] from tablename where signin = (select max(signin) from tablename where ID = 1)
-
==============================
5.
SELECT * FROM (SELECT * FROM tb1 ORDER BY signin DESC) GROUP BY id;
-
==============================
6.나는 비슷한 문제가 있었다. 버전 열에서 가장 높은 번호가 특정 기록을 얻기 위해 - 나는 즉, 페이지 내용 번역의 마지막 버전을 할 필요가 있었다. 나는 버전에서 주문한 모든 레코드를 선택하고 결과에서 (LIMIT 절을 사용하여) 첫 번째 행을 그래서.
나는 비슷한 문제가 있었다. 버전 열에서 가장 높은 번호가 특정 기록을 얻기 위해 - 나는 즉, 페이지 내용 번역의 마지막 버전을 할 필요가 있었다. 나는 버전에서 주문한 모든 레코드를 선택하고 결과에서 (LIMIT 절을 사용하여) 첫 번째 행을 그래서.
SELECT * FROM `page_contents_translations` ORDER BY version DESC LIMIT 1
-
==============================
7.달성하는 간단한 방법
달성하는 간단한 방법
나는이 오래된 질문 알아요 당신은 또한 같은 뭔가를 할 수
SELECT * FROM Table WHERE id=1 ORDER BY signin DESC
이상에서, 쿼리 첫 번째 레코드는 가장 최근에 기록 될 것입니다.
하나 개의 레코드 만 들어 당신은 같은 것을 사용할 수 있습니다
SELECT top(1) * FROM Table WHERE id=1 ORDER BY signin DESC
위 쿼리는 하나 개의 최신 기록을 반환합니다.
건배!
from https://stackoverflow.com/questions/8523374/mysql-get-most-recent-record by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] SQL Server 데이터베이스 호출 멀티 스레딩 C # 응용 프로그램 (0) | 2020.04.29 |
---|---|
[SQL] 다른 데이터베이스에 하나의 데이터베이스에서 데이터를 전송 (0) | 2020.04.29 |
[SQL] 어떻게 열을 변경하고 기본값을 변경하려면? (0) | 2020.04.29 |
[SQL] SQL에서 시간없이 날짜를 선택하는 방법 (0) | 2020.04.29 |
[SQL] 조건에 따라 다른 테이블의 열과 업데이트 열 값 [중복] (0) | 2020.04.29 |