문제
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
제휴하지 않습니다 StackOverflow