Probleme de requete avec MAX
Le
Yann
Bonjour à tous,
Voici un exemple de structure de table que j'ai :
User Lettre Espace Timestamp
--
toto C: 546644 1082042841
toto C: 468777 1083685036
L'enregistrement qui m'interresse est celui qui comporte le timestamp le
plus élevé (donc le plus récent)
Comment dois-je écrire ma requete ? Je n'arrive pas à intégrer la fonction
MAX ?
Merci d'avance.
Yann
Voici un exemple de structure de table que j'ai :
User Lettre Espace Timestamp
--
toto C: 546644 1082042841
toto C: 468777 1083685036
L'enregistrement qui m'interresse est celui qui comporte le timestamp le
plus élevé (donc le plus récent)
Comment dois-je écrire ma requete ? Je n'arrive pas à intégrer la fonction
MAX ?
Merci d'avance.
Yann

Poser une question


FROM Matable
GROUP BY User, Lettre, Espace
ATTENTION cepandant : tu as utilisé des mots réservés du SQL comme nom de colonne. C'est la chose à éviter.
Si ta requête ne passe pas, essaye :
SELECT "User", Lettre, Espace, MAX("Timestamp")
FROM Matable
GROUP BY "User", Lettre, Espace
En effet les mots User et Timestamp sont des noms réservés de SQL !
A +
User Lettre Espace Timestamp
--------------------------------------
toto C: 546644 1082042841
toto C: 468777 1083685036
Yann a écrit:
--
Frédéric BROUARD, MVP MS SQL Server. Expert Langage SQL / Delphi / web
Livre SQL - col. Référence : http://sqlpro.developpez.com/bookSQL.html
Le site du SQL, pour débutants et pros : http://sqlpro.developpez.com
************************ www.datasapiens.com *************************
En effet, avec ta syntaxe j'ai comme résultat :
toto C: 546644 1082042841
toto C: 468777 1083685036
Je suppose que c'est du au fait que Espace soit différent dans les deux
enregistrements. Par contre, si j'écris :
SELECT user, lettre, MAX([timestamp]) AS Expr1
FROM Matable
GROUP BY user, lettre
J'obtiens :
toto C: 1083685036 soit l'enregistrement qui contient le plus grand
timestamp. Donc j'essaye de rajouter Espace dans le select mais là j'ai une
erreur (à priori à cause du fait que Espace ne soit pas dans la clause GROUP
BY).
Comment je pourrais faire pour avoir comme résultat :
toto C: 468777 1083685036
soit l'ensemble des valeurs de l'enregistrement comportant le Timestamp le
plus élevé lorsque user et lettre sont identique ?
Yann
"Fred BROUARD - SQLpro" de news:
colonne. C'est la chose à éviter.
fonction
Oui
D'apres moi c'est impossible.
tout du moins avec un requete simple.
Pour la bonne et simple raison que si tu as deux timestamp egaux (et
maximum) mais pas des espaces identiques,
le moteur SQL va devoir faire un choix.
Hors le moteur SQL ne fait jamais de choix.
Donc c'est pas possible, sauf à faire:
SELECT * FROM table WHERE timestamp IN (SELECT max(timestamp) AS timestamp
FROM table) LIMIT 1;
ou plus simple
SELECT * FROM table ORDER BY timestamp DESC LIMIT 1;
m'enfin a mon avis c'est pas plus rapide.
Enfin bon, c'est un avis purement personnel.
Etienne
Pour info, je ne peux pas avoir deux timestamp identique avec des espaces
identiques.
Par contre j'ai essayé tes deux syntaxes et j'ai comme retour une erreur :
[Microsoft][OBDC SQL Server Driver][SQL Server]Line 1 : Incorrect syntax
near 'LIMIT'
Je suis sous SQL Server 2000.
Yann
"Etienne SOBOLE" news:40a34631$0$17915$