문제

uid     timestamp
1   1242420497
1   1243534661
1   1243534858
1   1243611312
1   1243611511
3   1244817764
3   1244819093
1   1244749446

나는이 테이블을 가지고 있고, 나는 가장 높은 타임 스탬프가있는 행을 잡을 것입니다. 나는 사용을 시도했다

SELECT uid,max(timestamp) FROM `node_revisions` WHERE nid=51

그러나 그것은 돌아왔다

uid timestamp
1   1244819093

당신이 볼 수 있듯이 잘못된 uid가 있습니다. 올바른 행에서 UID를 어떻게 잡을 수 있습니까? 감사해요

도움이 되었습니까?

해결책

SELECT uid, timestamp 
FROM node_revisions 
WHERE timestamp = (SELECT MAX(timestamp) FROM node_revisions);

업데이트되었습니다 Ryan Oberoi의 의견에 따르면; 우리는 한 레코드를 얻었으므로 외부 쿼리의 Max ()는 불필요합니다. 감사.

다른 팁

*에서 선택하십시오 node_revisions 여기서 NID = 51 타임 스탬프 DESC 한계에 의한 주문 1

절에 의해 그룹이 누락되어 있습니다.

SELECT
    uid,
    max(timestamp) as max_time
FROM
    node_revisions
WHERE
    nid = 51
GROUP BY
    uid
ORDER BY 
    max_time DESC 
LIMIT 1

첫 번째, nid 테이블에 나타나지 않습니다.

둘째, 나는 당신이 원한다고 생각합니다 group by uid

예제는 UID = 51 대신 NID = 51을 사용합니다. 이 코드가 실행중인 것에서 직접 복사 되었습니까? NID 필드가 있다면 이것이 문제 일 수 있습니다. 그리고 당신은 clause에 의해 그룹이 필요합니다.

SELECT uid, max(timestamp) as max_time
FROM 'node_revisions'
WHERE uid = 51
GROUP BY uid

이것은 잘 작동합니다

select uid FROM `node_revisions`
WHERE uid=51 and timestamp = (select max(timestamp) where uid = 51)
group by uid
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top