2013-12-18 3 views
0

나는 간단한 MySQL의 테이블이 있습니다MySQL은, 이해 SQL 쿼리 동작

| id | sid | date | 
+--------+---------+------------+ 
| 1  | 1  | 2013-12-01 | 
+--------+---------+------------+ 
| 3  | 2  | 2013-12-17 | 
+--------+---------+------------+ 
| 4  | 1  | 2013-12-17 | 
+--------+---------+------------+ 
| 5  | 1  | 2013-12-18 | 
+--------+---------+------------+ 

내가해야 할 그룹이 테이블 SID 필드로 및 정확한 날짜와 각 SID에 대한 최대 ID로 기록을 얻을. 아래 코드를 시도해 보겠습니다.

날짜 필드가 올바르지 않습니다. 예를 들어 결과로 ID가 5 인 2013-12-01이 나옵니다. 내가 뭘 잘못하고 있니?

SELECT a.id, a.date 
FROM foo a 
INNER JOIN (SELECT MAX(id) as max_id FROM foo GROUP BY sid) b ON a.id = b.max_id 
+0

원하는 결과는 무엇입니까? –

+0

정확한 ID로 최대 ID 가져 오기,이 예에서는 날짜가 5 인 ID를 얻으려고합니다 2013-12-18 – user1475692

답변

2

표준 SQL이 정의하는 방법 (1992 ANSI 적어도까지가, 다른 사람들이 저를 수정합니다), 당신의 SELECT 절의 필드가 조건에 의해 그룹에 포함되어야합니다 :

+1

감사합니다. 훌륭한 설명 : D – user1475692

2

당신은 가입 필요 . [MySQL은 그렇게하지 수 있지만 그것이 혼란 그 이유는 다음과 같습니다 결과는 예상대로되지 않습니다] :

SELECT MAX(id), date FROM my_table GROUP BY sid, date 

그러나이 경우

이 명확이

귀하의 질의가 다음해야 네가 원하는게 아니야. 귀하의 요구 사항은 각각 sId에 대해 MAX(id)에 해당하는 날짜를 얻는 것입니다.

서로 다른 쿼리에서 알고리즘의 각 부분을 격리해야합니다. 가입 -

SELECT date FROM my_table WHERE sid = X AND id = Y

3 : - 각 sid에 대한 식별자의 최대에 해당하는 날짜를 얻을

SELECT MAX(id) AS id, sid FROM my_table GROUP BY sid

2 : -

1 각 SID에 대한 최대 ID를 얻을 이 2 개의 검색어는 곧 INNER JOIN 개 이상을 사용하여 JOIN :

SELECT m.sid, m.id, m.date 
FROM my_table m 
    JOIN (SELECT MAX(id) AS id, sid FROM my_table GROUP BY sid) t 
     ON t.sid = m.sid AND m.id = t.id