그룹

2012-07-09 3 views
1
table(ms_replies) 
|------------------------------------------| 
| id | ticketID | replyStamp    | 
|------------------------------------------| 
| 1 | 7  | Tue 11 Oct 2011, 8:56am | 
| 2 | 7  | Wed 12 Oct 2011, 9:20am | 
| 3 | 8  | Wed 12 Oct 2011, 16:24pm | 
| 4 | 7  | Thu 27 Oct 2011, 20:28pm | 
| 5 | 8  | Tue 18 Oct 2011, 9:54am | 
|------------------------------------------| 

에게 내가 지금까지 가지고있는 코드를 사용하여 최신 기록을 가져 오는 중입니다.그룹

질문에 replace이 제거되어야합니다. 오후, 이건 내 일이 아니지만, 불행히도 내가 할 수는 없어. 그런데

SELECT a.ticketID, a.replyStamp 
FROM ms_replies a 
INNER JOIN 
(
    SELECT MAX(id) AS maxid 
    FROM ms_replies 
    WHERE ticketID IN ($IDs) 
    GROUP BY ticketID 
) b ON a.ticketID = b.maxid 

:

답변

0

당신이 날짜로 비교하려는 경우 날짜로 문자열을 변환 할 수 있습니다

SELECT ticketID, 
     MAX(STR_TO_DATE(
      REPLACE(REPLACE(replyStamp, 'am', ''), 'pm', ''), 
      '%a %d %b %Y, %T')) AS max_time 
    FROM ms_replies 
    WHERE ticketID IN (7, 8) 
GROUP BY ticketID; 

을하지만, 최신 항목이 항상 (샘플에서와 같이) 최대 아이디가 있다면 실제로 필요하지 않은 것; @ZaneBien 응답 (예 :

SELECT m.ticketID, m.replyStamp 
    FROM ms_replies AS m 
WHERE m.id = (
     SELECT MAX(id) FROM ms_replies 
     WHERE ticketID = m.ticketID 
     ); 
)과 같이 MAX (id)를 대신 확인할 수 있습니다.
0

나는 그룹이 (당신이 발견 한 것처럼)가 TICKETID하여 그들을 아래로 감소 할 때 첫 번째 레코드를 가지고 TICKETID DESC

0

사용하여이 솔루션을 주문하려고 생각 replyStamp 열은 실제로 문자열 대신 TIMESTAMP 또는 DATETIME 유형이어야합니다. 그렇게하면 모든 종류의 날짜/시간 계산을 할 수 있습니다.