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 タイムスタンプ DESC LIMIT 1

于 2009-06-12T15:49:28.703 に答える
2

この例では、uid=51 の代わりに nid=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 に答える
2

まずnid、テーブルに表示されません。

第二に、私はあなたがしたいと思うgroup by uid

于 2009-06-12T15:45:16.920 に答える
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 のコメントに従って更新。取得するレコードは 1 つだけなので、外側のクエリの MAX() は不要です。ありがとう。

于 2009-06-12T15:48:09.550 に答える