2009-06-12 8 views
0
uid  timestamp 
1 1242420497 
1 1243534661 
1 1243534858 
1 1243611312 
1 1243611511 
3 1244817764 
3 1244819093 
1 1244749446 

J'ai cette table, et je cherche à saisir la ligne qui a l'horodatage le plus élevé. Je essayé d'utiliserSQL MAX() question

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

mais retour

uid timestamp 
1 1244819093 

qui a le mauvais uid comme vous pouvez le voir. Comment pourrais-je lui faire attraper l'uid de la rangée correcte? merci

+0

vous condition est à la recherche de ... JNV ce que vous vouliez mettre l'uid là-bas? – Eric

+0

ce n'est pas une question SQL MAX. Il suffit de commander par horodatage DESC et choisissez le premier. Voir ma solution ci-dessous. –

+0

L'utilisation de fonctions d'agrégat sans clause GROUP BY doit être interdite - et se trouve dans T-SQL. – VVS

Répondre

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

Mise à jour par le commentaire de Ryan Oberoi; puisque nous obtenons juste l'enregistrement un, MAX() dans la requête externe est inutile. Merci.

+0

merci, cela semble fonctionner. Je viens d'ajouter ce champ NID pour répondre à mes besoins, mais il a fait le travail –

+0

ne pas besoin de la MAX dans la première sélection ... plus simple à utiliser ORDER BY timestamp DESC ... –

+0

ryan a raison ... voir ma réponse ci-dessous. – Eric

5

Il vous manque la clause 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 
+0

ne fonctionnait pas, car il renvoyait également le temps maximum de uid = 1 –

+0

@op: Quel RDBMS utilisez-vous? – Eric

+0

@OP: Vous pouvez ajouter "ORDER BY max_time DESC LIMIT 1" au code SQL pour empêcher le retour de plus d'un UID. –

2

première chose, nid ne figure pas dans votre table.

En second lieu, je soupçonne que vous voulez group by uid

2

Votre exemple utilise = 51 au lieu JNV de uid = 51. Ce code est-il copié directement à partir de ce que vous exécutez? S'il y a un champ nid, cela peut être votre problème. Et vous avez besoin d'un groupe par clause.

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

SELECT * FROM node_revisions OU = 51 JNV ORDER BY timestamp 1 DESC LIMIT

1

Cela fonctionnera fine..im que

select uid FROM `node_revisions` 
WHERE uid=51 and timestamp = (select max(timestamp) where uid = 51) 
group by uid 
+1

+1 pour la simplicité –