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 ?
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Fred BROUARD - SQLpro
SELECT User, Lettre, Espace, MAX(Timestamp) 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:
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
-- 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" target="_blank" class="text-blue hover:opacity-90 " style="word-break: break-all;" rel="noopener nofollow">http://sqlpro.developpez.com/bookSQL.html Le site du SQL, pour débutants et pros : http://sqlpro.developpez.com ************************ www.datasapiens.com *************************
SELECT User, Lettre, Espace, MAX(Timestamp)
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:
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
--
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 *************************
SELECT User, Lettre, Espace, MAX(Timestamp) 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:
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
-- 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" target="_blank" class="text-blue hover:opacity-90 " style="word-break: break-all;" rel="noopener nofollow">http://sqlpro.developpez.com/bookSQL.html Le site du SQL, pour débutants et pros : http://sqlpro.developpez.com ************************ www.datasapiens.com *************************
Yann
Merci mais ce n'est pas tout à fait cela.
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" a écrit dans le message de news:
SELECT User, Lettre, Espace, MAX(Timestamp) 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: > 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 > >
-- 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" target="_blank" class="text-blue hover:opacity-90 " style="word-break: break-all;" rel="noopener nofollow">http://sqlpro.developpez.com/bookSQL.html Le site du SQL, pour débutants et pros : http://sqlpro.developpez.com ************************ www.datasapiens.com *************************
Merci mais ce n'est pas tout à fait cela.
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" <brouardf@club-internet.fr> a écrit dans le message
de news:40A33FAA.8020604@club-internet.fr...
SELECT User, Lettre, Espace, MAX(Timestamp)
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:
> 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
>
>
--
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" a écrit dans le message de news:
SELECT User, Lettre, Espace, MAX(Timestamp) 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: > 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 > >
-- 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" target="_blank" class="text-blue hover:opacity-90 " style="word-break: break-all;" rel="noopener nofollow">http://sqlpro.developpez.com/bookSQL.html Le site du SQL, pour débutants et pros : http://sqlpro.developpez.com ************************ www.datasapiens.com *************************
Etienne SOBOLE
"Yann" a écrit dans le message de news: c7vfp4$nre$
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 :
Oui
Comment je pourrais faire pour avoir comme résultat : toto C: 468777 1083685036
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
"Yann" <yann.catois@9online.fr> a écrit dans le message de news:
c7vfp4$nre$1@s1.read.news.oleane.net...
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 :
Oui
Comment je pourrais faire pour avoir comme résultat :
toto C: 468777 1083685036
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.
"Yann" a écrit dans le message de news: c7vfp4$nre$
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 :
Oui
Comment je pourrais faire pour avoir comme résultat : toto C: 468777 1083685036
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
Yann
Merci pour ces précisions.
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" a écrit dans le message de news:40a34631$0$17915$
"Yann" a écrit dans le message de news: c7vfp4$nre$ > 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 :
Oui
> Comment je pourrais faire pour avoir comme résultat : > toto C: 468777 1083685036
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
Merci pour ces précisions.
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" <e.news@webshaker.net> a écrit dans le message de
news:40a34631$0$17915$626a14ce@news.free.fr...
"Yann" <yann.catois@9online.fr> a écrit dans le message de news:
c7vfp4$nre$1@s1.read.news.oleane.net...
> 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 :
Oui
> Comment je pourrais faire pour avoir comme résultat :
> toto C: 468777 1083685036
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.
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" a écrit dans le message de news:40a34631$0$17915$
"Yann" a écrit dans le message de news: c7vfp4$nre$ > 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 :
Oui
> Comment je pourrais faire pour avoir comme résultat : > toto C: 468777 1083685036
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.