Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Requête inhabituelle

8 réponses
Avatar
Alain
Bonjour à tous.

Je dois écrire une requête une peu particulière et je ne trouve pas de
solution.
Puis-je avoir votre aide ?

J'ai une table qui contient les poids de personnes mesurés de manière
répétée: j'y stocke, pour chaque mesure du poids, le nom de la personne, le
poids et la date de cette mesure du poids. Pour certaines personnes, j'ai
une ou des mesures du poids à des moments précis.

Je dois écrire une requête SQL qui me donne la liste des dernières mesures
de poids pour chaque personne.
Suis-je clair ?

Voici un exemple:

Sophie, 60 Kg le 10/6/2008
Elène, 50 Kg le 8/5/2008
Sophie, 62 Kg le 12/6/2008
Sophie 59 Kg le 1/6/2008

Résultat souhaité (pour chaque personne la dernière mesure du poids):
Sophie, 62 Kg le 12/6/2008
Elène, 50 Kg le 8/5/2008

Quelqu'un a-t-il une idée ?

Merci d'avance,
Alain.

8 réponses

Avatar
Philippe Bouchardy
Bonjour Alain,

En partant du principe qu'il n'y a qu'une seule pesé par personne par jour
je vous propose la requête suivante :

select idPerson,
poids,
dtMesure
from histoPoids T1,
(select idPerson, MAX(dtMesure) as maxDtMesure
from histoPoids
group by idPerson) T2
where T1.idPerson = T2.idPerson

Cordialement,

Philippe


"Alain" wrote in message
news:
Bonjour à tous.

Je dois écrire une requête une peu particulière et je ne trouve pas de
solution.
Puis-je avoir votre aide ?

J'ai une table qui contient les poids de personnes mesurés de manière
répétée: j'y stocke, pour chaque mesure du poids, le nom de la personne,
le poids et la date de cette mesure du poids. Pour certaines personnes,
j'ai une ou des mesures du poids à des moments précis.

Je dois écrire une requête SQL qui me donne la liste des dernières mesures
de poids pour chaque personne.
Suis-je clair ?

Voici un exemple:

Sophie, 60 Kg le 10/6/2008
Elène, 50 Kg le 8/5/2008
Sophie, 62 Kg le 12/6/2008
Sophie 59 Kg le 1/6/2008

Résultat souhaité (pour chaque personne la dernière mesure du poids):
Sophie, 62 Kg le 12/6/2008
Elène, 50 Kg le 8/5/2008

Quelqu'un a-t-il une idée ?

Merci d'avance,
Alain.




Avatar
Christophe Pin
Bonjour,

Ne manquerait il pas la condition dtMesure=maxDtMesure car sinon, je ne vois
pas l'utilité du sous -select.

Par contre, il serait bien de préciser dans le select principal T1.idPerson,
faute de quoi il y aura ambiguité sur le champ (etant présent également dans
T2)

--
_________________________________________
Now, you know the truth, Space Invaders are Back
http://www.joachimgarraud.com
L'invasion ne fait QUE commencer...



"Philippe Bouchardy" a écrit dans le message de
news:
Bonjour Alain,

En partant du principe qu'il n'y a qu'une seule pesé par personne par jour
je vous propose la requête suivante :

select idPerson,
poids,
dtMesure
from histoPoids T1,
(select idPerson, MAX(dtMesure) as maxDtMesure
from histoPoids
group by idPerson) T2
where T1.idPerson = T2.idPerson

Cordialement,

Philippe


"Alain" wrote in message
news:
Bonjour à tous.

Je dois écrire une requête une peu particulière et je ne trouve pas de
solution.
Puis-je avoir votre aide ?

J'ai une table qui contient les poids de personnes mesurés de manière
répétée: j'y stocke, pour chaque mesure du poids, le nom de la personne,
le poids et la date de cette mesure du poids. Pour certaines personnes,
j'ai une ou des mesures du poids à des moments précis.

Je dois écrire une requête SQL qui me donne la liste des dernières
mesures de poids pour chaque personne.
Suis-je clair ?

Voici un exemple:

Sophie, 60 Kg le 10/6/2008
Elène, 50 Kg le 8/5/2008
Sophie, 62 Kg le 12/6/2008
Sophie 59 Kg le 1/6/2008

Résultat souhaité (pour chaque personne la dernière mesure du poids):
Sophie, 62 Kg le 12/6/2008
Elène, 50 Kg le 8/5/2008

Quelqu'un a-t-il une idée ?

Merci d'avance,
Alain.








Avatar
Philippe Bouchardy
Merci Christophe, c'est tout a fait exacte, un mauvais copier / coller et un
petit oubli de préfixe !
Je repost la requete complete !

select t1.idPerson,
poids,
dtMesure
from histoPoids T1,
(select idPerson, MAX(dtMesure) as maxDtMesure
from histoPoids
group by idPerson) T2
where T1.idPerson = T2.idPerson
and T1.dtMesure = T2.maxDtMesure


"Christophe Pin" wrote in message
news:485b610a$0$26944$
Bonjour,

Ne manquerait il pas la condition dtMesure=maxDtMesure car sinon, je ne
vois pas l'utilité du sous -select.

Par contre, il serait bien de préciser dans le select principal
T1.idPerson, faute de quoi il y aura ambiguité sur le champ (etant présent
également dans T2)

--
_________________________________________
Now, you know the truth, Space Invaders are Back
http://www.joachimgarraud.com
L'invasion ne fait QUE commencer...



"Philippe Bouchardy" a écrit dans le message de
news:
Bonjour Alain,

En partant du principe qu'il n'y a qu'une seule pesé par personne par
jour je vous propose la requête suivante :

select idPerson,
poids,
dtMesure
from histoPoids T1,
(select idPerson, MAX(dtMesure) as maxDtMesure
from histoPoids
group by idPerson) T2
where T1.idPerson = T2.idPerson

Cordialement,

Philippe


"Alain" wrote in message
news:
Bonjour à tous.

Je dois écrire une requête une peu particulière et je ne trouve pas de
solution.
Puis-je avoir votre aide ?

J'ai une table qui contient les poids de personnes mesurés de manière
répétée: j'y stocke, pour chaque mesure du poids, le nom de la personne,
le poids et la date de cette mesure du poids. Pour certaines personnes,
j'ai une ou des mesures du poids à des moments précis.

Je dois écrire une requête SQL qui me donne la liste des dernières
mesures de poids pour chaque personne.
Suis-je clair ?

Voici un exemple:

Sophie, 60 Kg le 10/6/2008
Elène, 50 Kg le 8/5/2008
Sophie, 62 Kg le 12/6/2008
Sophie 59 Kg le 1/6/2008

Résultat souhaité (pour chaque personne la dernière mesure du poids):
Sophie, 62 Kg le 12/6/2008
Elène, 50 Kg le 8/5/2008

Quelqu'un a-t-il une idée ?

Merci d'avance,
Alain.












Avatar
Christophe Pin
:)

--
_________________________________________
Now, you know the truth, Space Invaders are Back
http://www.joachimgarraud.com
L'invasion ne fait QUE commencer...



"Philippe Bouchardy" a écrit dans le message de
news:
Merci Christophe, c'est tout a fait exacte, un mauvais copier / coller et
un petit oubli de préfixe !
Je repost la requete complete !

select t1.idPerson,
poids,
dtMesure
from histoPoids T1,
(select idPerson, MAX(dtMesure) as maxDtMesure
from histoPoids
group by idPerson) T2
where T1.idPerson = T2.idPerson
and T1.dtMesure = T2.maxDtMesure


"Christophe Pin" wrote in message
news:485b610a$0$26944$
Bonjour,

Ne manquerait il pas la condition dtMesure=maxDtMesure car sinon, je ne
vois pas l'utilité du sous -select.

Par contre, il serait bien de préciser dans le select principal
T1.idPerson, faute de quoi il y aura ambiguité sur le champ (etant
présent également dans T2)

--
_________________________________________
Now, you know the truth, Space Invaders are Back
http://www.joachimgarraud.com
L'invasion ne fait QUE commencer...



"Philippe Bouchardy" a écrit dans le message de
news:
Bonjour Alain,

En partant du principe qu'il n'y a qu'une seule pesé par personne par
jour je vous propose la requête suivante :

select idPerson,
poids,
dtMesure
from histoPoids T1,
(select idPerson, MAX(dtMesure) as maxDtMesure
from histoPoids
group by idPerson) T2
where T1.idPerson = T2.idPerson

Cordialement,

Philippe


"Alain" wrote in message
news:
Bonjour à tous.

Je dois écrire une requête une peu particulière et je ne trouve pas de
solution.
Puis-je avoir votre aide ?

J'ai une table qui contient les poids de personnes mesurés de manière
répétée: j'y stocke, pour chaque mesure du poids, le nom de la
personne, le poids et la date de cette mesure du poids. Pour certaines
personnes, j'ai une ou des mesures du poids à des moments précis.

Je dois écrire une requête SQL qui me donne la liste des dernières
mesures de poids pour chaque personne.
Suis-je clair ?

Voici un exemple:

Sophie, 60 Kg le 10/6/2008
Elène, 50 Kg le 8/5/2008
Sophie, 62 Kg le 12/6/2008
Sophie 59 Kg le 1/6/2008

Résultat souhaité (pour chaque personne la dernière mesure du poids):
Sophie, 62 Kg le 12/6/2008
Elène, 50 Kg le 8/5/2008

Quelqu'un a-t-il une idée ?

Merci d'avance,
Alain.
















Avatar
Alain
Merci.
Désolé de ne répondre que tardivement.
Je pensais à une solution plus simple avec des opérateurs spécifique comme
le TOP ou quelque chose du genre...

Alain.





"Christophe Pin" a écrit dans le message de news:
485b6516$0$16868$
:)

--
_________________________________________
Now, you know the truth, Space Invaders are Back
http://www.joachimgarraud.com
L'invasion ne fait QUE commencer...



"Philippe Bouchardy" a écrit dans le message de
news:
Merci Christophe, c'est tout a fait exacte, un mauvais copier / coller et
un petit oubli de préfixe !
Je repost la requete complete !

select t1.idPerson,
poids,
dtMesure
from histoPoids T1,
(select idPerson, MAX(dtMesure) as maxDtMesure
from histoPoids
group by idPerson) T2
where T1.idPerson = T2.idPerson
and T1.dtMesure = T2.maxDtMesure


"Christophe Pin" wrote in message
news:485b610a$0$26944$
Bonjour,

Ne manquerait il pas la condition dtMesure=maxDtMesure car sinon, je ne
vois pas l'utilité du sous -select.

Par contre, il serait bien de préciser dans le select principal
T1.idPerson, faute de quoi il y aura ambiguité sur le champ (etant
présent également dans T2)

--
_________________________________________
Now, you know the truth, Space Invaders are Back
http://www.joachimgarraud.com
L'invasion ne fait QUE commencer...



"Philippe Bouchardy" a écrit dans le message de
news:
Bonjour Alain,

En partant du principe qu'il n'y a qu'une seule pesé par personne par
jour je vous propose la requête suivante :

select idPerson,
poids,
dtMesure
from histoPoids T1,
(select idPerson, MAX(dtMesure) as maxDtMesure
from histoPoids
group by idPerson) T2
where T1.idPerson = T2.idPerson

Cordialement,

Philippe


"Alain" wrote in message
news:
Bonjour à tous.

Je dois écrire une requête une peu particulière et je ne trouve pas de
solution.
Puis-je avoir votre aide ?

J'ai une table qui contient les poids de personnes mesurés de manière
répétée: j'y stocke, pour chaque mesure du poids, le nom de la
personne, le poids et la date de cette mesure du poids. Pour certaines
personnes, j'ai une ou des mesures du poids à des moments précis.

Je dois écrire une requête SQL qui me donne la liste des dernières
mesures de poids pour chaque personne.
Suis-je clair ?

Voici un exemple:

Sophie, 60 Kg le 10/6/2008
Elène, 50 Kg le 8/5/2008
Sophie, 62 Kg le 12/6/2008
Sophie 59 Kg le 1/6/2008

Résultat souhaité (pour chaque personne la dernière mesure du poids):
Sophie, 62 Kg le 12/6/2008
Elène, 50 Kg le 8/5/2008

Quelqu'un a-t-il une idée ?

Merci d'avance,
Alain.




















Avatar
Alain
J'ai l'impression que le requête que vous me proposez est celle qui vient
naturellement à l'esprit lorsqu'on connait SQL mais je trouve que cette
solution met en évidence un manque au niveau de ce language: le
MAX(dtMesure) permet d'avoir la dernière date mais il est impossible
d'obtenir *directement* le poids associé à cette date; il faut une jointure
qui, du point de vue de la logique procédurale classique, est superflue
puisque, si on a MAX(dtMesure), le SGBD a déjà le record qui contient le
poids associé à cette date.
C'est pour cela que je pensais au TOP que je connais mal ou à d'autres
opérateurs spécifique non standard SQL...

Alain.





"Alain" a écrit dans le message de news:

Merci.
Désolé de ne répondre que tardivement.
Je pensais à une solution plus simple avec des opérateurs spécifique comme
le TOP ou quelque chose du genre...

Alain.





"Christophe Pin" a écrit dans le message de news:
485b6516$0$16868$
:)

--
_________________________________________
Now, you know the truth, Space Invaders are Back
http://www.joachimgarraud.com
L'invasion ne fait QUE commencer...



"Philippe Bouchardy" a écrit dans le message de
news:
Merci Christophe, c'est tout a fait exacte, un mauvais copier / coller
et un petit oubli de préfixe !
Je repost la requete complete !

select t1.idPerson,
poids,
dtMesure
from histoPoids T1,
(select idPerson, MAX(dtMesure) as maxDtMesure
from histoPoids
group by idPerson) T2
where T1.idPerson = T2.idPerson
and T1.dtMesure = T2.maxDtMesure


"Christophe Pin" wrote in message
news:485b610a$0$26944$
Bonjour,

Ne manquerait il pas la condition dtMesure=maxDtMesure car sinon, je ne
vois pas l'utilité du sous -select.

Par contre, il serait bien de préciser dans le select principal
T1.idPerson, faute de quoi il y aura ambiguité sur le champ (etant
présent également dans T2)

--
_________________________________________
Now, you know the truth, Space Invaders are Back
http://www.joachimgarraud.com
L'invasion ne fait QUE commencer...



"Philippe Bouchardy" a écrit dans le message
de news:
Bonjour Alain,

En partant du principe qu'il n'y a qu'une seule pesé par personne par
jour je vous propose la requête suivante :

select idPerson,
poids,
dtMesure
from histoPoids T1,
(select idPerson, MAX(dtMesure) as maxDtMesure
from histoPoids
group by idPerson) T2
where T1.idPerson = T2.idPerson

Cordialement,

Philippe


"Alain" wrote in message
news:
Bonjour à tous.

Je dois écrire une requête une peu particulière et je ne trouve pas
de solution.
Puis-je avoir votre aide ?

J'ai une table qui contient les poids de personnes mesurés de manière
répétée: j'y stocke, pour chaque mesure du poids, le nom de la
personne, le poids et la date de cette mesure du poids. Pour
certaines personnes, j'ai une ou des mesures du poids à des moments
précis.

Je dois écrire une requête SQL qui me donne la liste des dernières
mesures de poids pour chaque personne.
Suis-je clair ?

Voici un exemple:

Sophie, 60 Kg le 10/6/2008
Elène, 50 Kg le 8/5/2008
Sophie, 62 Kg le 12/6/2008
Sophie 59 Kg le 1/6/2008

Résultat souhaité (pour chaque personne la dernière mesure du poids):
Sophie, 62 Kg le 12/6/2008
Elène, 50 Kg le 8/5/2008

Quelqu'un a-t-il une idée ?

Merci d'avance,
Alain.
























Avatar
Alain
Personne ne me répond...
Mes propos sont donc de si peu d'interêt ?
Je ne veux par ergoter sur les qualités des fonctionnalités de SQL mais bien
optimiser mes requêtes...



"Alain" a écrit dans le message de news:

J'ai l'impression que le requête que vous me proposez est celle qui vient
naturellement à l'esprit lorsqu'on connait SQL mais je trouve que cette
solution met en évidence un manque au niveau de ce language: le
MAX(dtMesure) permet d'avoir la dernière date mais il est impossible
d'obtenir *directement* le poids associé à cette date; il faut une
jointure qui, du point de vue de la logique procédurale classique, est
superflue puisque, si on a MAX(dtMesure), le SGBD a déjà le record qui
contient le poids associé à cette date.
C'est pour cela que je pensais au TOP que je connais mal ou à d'autres
opérateurs spécifique non standard SQL...

Alain.





"Alain" a écrit dans le message de news:

Merci.
Désolé de ne répondre que tardivement.
Je pensais à une solution plus simple avec des opérateurs spécifique
comme le TOP ou quelque chose du genre...

Alain.





"Christophe Pin" a écrit dans le message de news:
485b6516$0$16868$
:)

--
_________________________________________
Now, you know the truth, Space Invaders are Back
http://www.joachimgarraud.com
L'invasion ne fait QUE commencer...



"Philippe Bouchardy" a écrit dans le message de
news:
Merci Christophe, c'est tout a fait exacte, un mauvais copier / coller
et un petit oubli de préfixe !
Je repost la requete complete !

select t1.idPerson,
poids,
dtMesure
from histoPoids T1,
(select idPerson, MAX(dtMesure) as maxDtMesure
from histoPoids
group by idPerson) T2
where T1.idPerson = T2.idPerson
and T1.dtMesure = T2.maxDtMesure


"Christophe Pin" wrote in message
news:485b610a$0$26944$
Bonjour,

Ne manquerait il pas la condition dtMesure=maxDtMesure car sinon, je
ne vois pas l'utilité du sous -select.

Par contre, il serait bien de préciser dans le select principal
T1.idPerson, faute de quoi il y aura ambiguité sur le champ (etant
présent également dans T2)

--
_________________________________________
Now, you know the truth, Space Invaders are Back
http://www.joachimgarraud.com
L'invasion ne fait QUE commencer...



"Philippe Bouchardy" a écrit dans le message
de news:
Bonjour Alain,

En partant du principe qu'il n'y a qu'une seule pesé par personne par
jour je vous propose la requête suivante :

select idPerson,
poids,
dtMesure
from histoPoids T1,
(select idPerson, MAX(dtMesure) as maxDtMesure
from histoPoids
group by idPerson) T2
where T1.idPerson = T2.idPerson

Cordialement,

Philippe


"Alain" wrote in message
news:
Bonjour à tous.

Je dois écrire une requête une peu particulière et je ne trouve pas
de solution.
Puis-je avoir votre aide ?

J'ai une table qui contient les poids de personnes mesurés de
manière répétée: j'y stocke, pour chaque mesure du poids, le nom de
la personne, le poids et la date de cette mesure du poids. Pour
certaines personnes, j'ai une ou des mesures du poids à des moments
précis.

Je dois écrire une requête SQL qui me donne la liste des dernières
mesures de poids pour chaque personne.
Suis-je clair ?

Voici un exemple:

Sophie, 60 Kg le 10/6/2008
Elène, 50 Kg le 8/5/2008
Sophie, 62 Kg le 12/6/2008
Sophie 59 Kg le 1/6/2008

Résultat souhaité (pour chaque personne la dernière mesure du
poids):
Sophie, 62 Kg le 12/6/2008
Elène, 50 Kg le 8/5/2008

Quelqu'un a-t-il une idée ?

Merci d'avance,
Alain.




























Avatar
Lobrys
tu pensais peut etre à un truc du genre :

SELECT *
FROM histoPoids
GROUP BY idPerson
HAVING max(dtMesure)

je post sans verifier la requete! sorry!

a+
syl



"Alain" a écrit dans le message de news:

J'ai l'impression que le requête que vous me proposez est celle qui vient
naturellement à l'esprit lorsqu'on connait SQL mais je trouve que cette
solution met en évidence un manque au niveau de ce language: le
MAX(dtMesure) permet d'avoir la dernière date mais il est impossible
d'obtenir *directement* le poids associé à cette date; il faut une
jointure qui, du point de vue de la logique procédurale classique, est
superflue puisque, si on a MAX(dtMesure), le SGBD a déjà le record qui
contient le poids associé à cette date.
C'est pour cela que je pensais au TOP que je connais mal ou à d'autres
opérateurs spécifique non standard SQL...

Alain.





"Alain" a écrit dans le message de news:

Merci.
Désolé de ne répondre que tardivement.
Je pensais à une solution plus simple avec des opérateurs spécifique
comme le TOP ou quelque chose du genre...

Alain.





"Christophe Pin" a écrit dans le message de news:
485b6516$0$16868$
:)

--
_________________________________________
Now, you know the truth, Space Invaders are Back
http://www.joachimgarraud.com
L'invasion ne fait QUE commencer...



"Philippe Bouchardy" a écrit dans le message de
news:
Merci Christophe, c'est tout a fait exacte, un mauvais copier / coller
et un petit oubli de préfixe !
Je repost la requete complete !

select t1.idPerson,
poids,
dtMesure
from histoPoids T1,
(select idPerson, MAX(dtMesure) as maxDtMesure
from histoPoids
group by idPerson) T2
where T1.idPerson = T2.idPerson
and T1.dtMesure = T2.maxDtMesure


"Christophe Pin" wrote in message
news:485b610a$0$26944$
Bonjour,

Ne manquerait il pas la condition dtMesure=maxDtMesure car sinon, je
ne vois pas l'utilité du sous -select.

Par contre, il serait bien de préciser dans le select principal
T1.idPerson, faute de quoi il y aura ambiguité sur le champ (etant
présent également dans T2)

--
_________________________________________
Now, you know the truth, Space Invaders are Back
http://www.joachimgarraud.com
L'invasion ne fait QUE commencer...



"Philippe Bouchardy" a écrit dans le message
de news:
Bonjour Alain,

En partant du principe qu'il n'y a qu'une seule pesé par personne par
jour je vous propose la requête suivante :

select idPerson,
poids,
dtMesure
from histoPoids T1,
(select idPerson, MAX(dtMesure) as maxDtMesure
from histoPoids
group by idPerson) T2
where T1.idPerson = T2.idPerson

Cordialement,

Philippe


"Alain" wrote in message
news:
Bonjour à tous.

Je dois écrire une requête une peu particulière et je ne trouve pas
de solution.
Puis-je avoir votre aide ?

J'ai une table qui contient les poids de personnes mesurés de
manière répétée: j'y stocke, pour chaque mesure du poids, le nom de
la personne, le poids et la date de cette mesure du poids. Pour
certaines personnes, j'ai une ou des mesures du poids à des moments
précis.

Je dois écrire une requête SQL qui me donne la liste des dernières
mesures de poids pour chaque personne.
Suis-je clair ?

Voici un exemple:

Sophie, 60 Kg le 10/6/2008
Elène, 50 Kg le 8/5/2008
Sophie, 62 Kg le 12/6/2008
Sophie 59 Kg le 1/6/2008

Résultat souhaité (pour chaque personne la dernière mesure du
poids):
Sophie, 62 Kg le 12/6/2008
Elène, 50 Kg le 8/5/2008

Quelqu'un a-t-il une idée ?

Merci d'avance,
Alain.