0
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?谢谢

4

6 回答 6

5

您缺少 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
于 2009-06-12T15:44:59.323 回答
5

SELECT * FROM node_revisionsWHERE nid=51 ORDER BY timestamp DESC LIMIT 1

于 2009-06-12T15:49:28.703 回答
2

首先,nid不会出现在您的表格中。

第二,我怀疑你想要group by uid

于 2009-06-12T15:45:16.920 回答
2

您的示例使用 nid=51 而不是 uid=51。此代码是直接从您正在运行的代码中复制的吗?如果有一个 nid 字段,这可能是你的问题。你需要一个 group by 子句。

SELECT uid, max(timestamp) as max_time
FROM 'node_revisions'
WHERE uid = 51
GROUP BY uid
于 2009-06-12T15:45:59.133 回答
1

这会很好用..我确定

select uid FROM `node_revisions`
WHERE uid=51 and timestamp = (select max(timestamp) where uid = 51)
group by uid
于 2009-06-12T15:51:29.060 回答
-1
SELECT uid, timestamp 
FROM node_revisions 
WHERE timestamp = (SELECT MAX(timestamp) FROM node_revisions);

根据 Ryan Oberoi 的评论更新;因为我们只得到一条记录,所以外部查询中的 MAX() 是不必要的。谢谢。

于 2009-06-12T15:48:09.550 回答