SQL MAX () вопрос - PullRequest
0 голосов
/ 12 июня 2009
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 из правильного ряда? спасибо

Ответы [ 6 ]

5 голосов
/ 12 июня 2009

ВЫБРАТЬ * ОТ node_revisions ГДЕ nid = 51 ЗАКАЗАТЬ по отметке времени DESC LIMIT 1

5 голосов
/ 12 июня 2009

Вам не хватает предложения GROUP BY.

SELECT
    uid,
    max(timestamp) as max_time
FROM
    node_revisions
WHERE
    nid = 51
GROUP BY
    uid
ORDER BY 
    max_time DESC 
LIMIT 1
2 голосов
/ 12 июня 2009

Ваш пример использует nid = 51 вместо uid = 51. Этот код скопирован непосредственно из того, что вы используете? Если есть поле nid, это может быть вашей проблемой. И вам нужна группа по предложению.

SELECT uid, max(timestamp) as max_time
FROM 'node_revisions'
WHERE uid = 51
GROUP BY uid
2 голосов
/ 12 июня 2009

Во-первых, nid не отображается в вашей таблице.

секунду, я подозреваю, что вы хотите group by uid

1 голос
/ 12 июня 2009

Это будет прекрасно работать ... уверен,

select uid FROM `node_revisions`
WHERE uid=51 and timestamp = (select max(timestamp) where uid = 51)
group by uid
0 голосов
/ 12 июня 2009
SELECT uid, timestamp 
FROM node_revisions 
WHERE timestamp = (SELECT MAX(timestamp) FROM node_revisions);

Обновлено за комментарий Райана Обероя; поскольку мы получаем только одну запись, MAX () во внешнем запросе не требуется. Спасибо.

...