2012-04-09 3 views
1

다음 쿼리 사용 일부 조건이있는 최신 레코드를 얻는 방법을 찾고 있습니다. 하지만 최신 기록이 아닌 첫 번째 기록을 제공합니다. 나는 에 의해 유일한 고려 그룹은 단지 나에게하는 오류를 제공함으로써 의해 순서를 교환하고 그룹 내MySql : 정렬 기준 및 그룹 최신 레코드를 제공하지 않음으로써 조합

SELECT * FROM `contacts` WHERE `id_receiver`=1 GROUP BY `id_thread` ORDER BY created DESC 

id id_sender id_thread sender_email id_receiver  created(datetime) 
1 2    2   51    1    2012-03-24 13:44:48 
2 4    4   1    5     2012-04-26 13:46:05 
3 2    2   51    1    2012-04-09 12:12:30 

에게 내가 테스트를했던

id id_sender id_thread sender_email id_receiver  created(datetime) 
3 2   2   51    1    2012-04-09 12:12:30 

필요한 출력을 알려 주시기 바랍니다 생각합니다.

아무도 이것을 들여다 볼 수 있습니까?. 감사.

편집 편집 질문은, 당신이 너무 ID를 기준으로 정렬하는 것보다 기록이 순차적으로가는 경우 id_thread

+0

groupe by group을 사용하는 경우 해당 열에 대해 집계 함수를 사용해야한다는 것을 알고 계십니까? –

+1

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@? 어떤 데이터 형식을 사용하고 있습니까? –

+1

생성 된 출력 값이 "2012-04-09 12:12:30"이 아니어야 샘플 데이터에 존재하지 않습니까? – liquorvicar

답변

3

어떻게 당신 GROUP BY id_thread을 테이블에 id_thread 열이 없을 때? 당신이 원하는 당신의 의견을 바탕으로

SELECT * 
FROM contacts 
WHERE id_receiver = 1 
           --- GROUP BY id_thread 
           --- removed 
ORDER BY created DESC 
LIMIT 1       --- only show one row 

다른 더 복잡한 쿼리를있는 모든 id_thread, 최신 (created으로 정렬) 행입니다. [greatest-n-per-group]이라는 이름의 검색어에 대한 태그도 있습니다.

SELECT c.* 
FROM contacts AS c 
    JOIN 
    (SELECT id_thread, MAX(created) AS created 
     FROM contacts 
     WHERE id_receiver = 1 
     GROUP BY id_thread 
    ) AS g 
    ON (g.id_thread, g.created) = (c.id_thread, c.created) 
WHERE c.id_receiver = 1 
+0

, 거기에 id_thread, 어떻게 든 추가 할 Iforget, 그것은 가장 중요하지만. –

+0

와우! 그게 속임수 야. –

+0

이'id_thread'의 영향을 받고 싶은 결과가 있습니까? –

0

을 작성하는 것을 잊지 - 경우 그것은 순차적으로 만들어지는 경우에만 -

관련 문제