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

aide requête SQL selection sur une table

5 réponses
Avatar
bonnie2424
bonjour,

j'aimerai votre aide sur une requête sql. Elle a l'air toute simple, mais je
suis bloquée, je suis novice en sql, si quelqu'un pouvais m'apporter la
solution, ça serai gentil.
J'ai essayé plusieurs requêtes différentes mais aucune ne donne le résultat
escompté.

Voilà, je dois sélectionner seulement sur une table appelée COMPTEUR

Elle regroupe des données de matricule, service, date, compteur 1 et
compteur2 que je veux afficher

-->Les données se présente de la façon suivante :

[matricule] [date] [service] [compteur1] [compteur2]
8562 12/03/04 1 5621 2663
8562 13/03/04 1 56263 6485
8562 14/03/04 1 56318 466
8562 15/03/04 1 56335 541
0328 11/03/04 2 5632 55339
0328 12/03/04 2 3315 3852
0328 13/03/04 2 555 4785
0328 14/03/04 2 4556 556632
1200 11/03/04 1 53 6552
1200 12/04/04 1 45 5568
1200 13/04/04 1 53636 8584

Le matricule est une clé primaire, service une clé étrangère.
Je voudrais sélectionner seulement les matricules, date, service, compteur 1
et compteur2 les plus récents c'est à dire les lignes 4, 8 et 11.

Comment procéder? j'ai essayé de faire un 'select distinct matricule, date,
service, compteur 1, compteur 2 from compteur' mais ça fonctionne pas, ça
renvoie tous les enregistrements. Par contre un 'select distinct
matricule,max(date), service from compteur' me renvoie les dernières lignes
comme voulu mais lorsqu'on rajoute les compteurs rien ne va plus.

Comment faire un 'distinct' sur quelques champs? Merci beaucoup.

5 réponses

Avatar
Tom
select [matricule],[date],[service],[compteur1],
[compteur2]
from COMPTEUR
where [date] =
(
select MAX([date])
from COMPTEUR COMPTEUR2
where COMPTEUR2.[matricule] = TaTable.
[matricule]
and COMPTEUR2.[service] = TaTable.
[service]
)

-----Message d'origine-----
bonjour,

j'aimerai votre aide sur une requête sql. Elle a l'air


toute simple, mais je
suis bloquée, je suis novice en sql, si quelqu'un


pouvais m'apporter la
solution, ça serai gentil.
J'ai essayé plusieurs requêtes différentes mais aucune


ne donne le résultat
escompté.

Voilà, je dois sélectionner seulement sur une table


appelée COMPTEUR

Elle regroupe des données de matricule, service, date,


compteur 1 et
compteur2 que je veux afficher

-->Les données se présente de la façon suivante :

[matricule] [date] [service]


[compteur1] [compteur2]
8562 12/03/04 1


5621 2663
8562 13/03/04 1


56263 6485
8562 14/03/04 1


56318 466
8562 15/03/04 1


56335 541
0328 11/03/04 2


5632 55339
0328 12/03/04 2


3315 3852
0328 13/03/04 2


555 4785
0328 14/03/04 2


4556 556632
1200 11/03/04 1


53 6552
1200 12/04/04 1


45 5568
1200 13/04/04 1


53636 8584

Le matricule est une clé primaire, service une clé


étrangère.
Je voudrais sélectionner seulement les matricules, date,


service, compteur 1
et compteur2 les plus récents c'est à dire les lignes 4,


8 et 11.

Comment procéder? j'ai essayé de faire un 'select


distinct matricule, date,
service, compteur 1, compteur 2 from compteur' mais ça


fonctionne pas, ça
renvoie tous les enregistrements. Par contre un 'select


distinct
matricule,max(date), service from compteur' me renvoie


les dernières lignes
comme voulu mais lorsqu'on rajoute les compteurs rien ne


va plus.

Comment faire un 'distinct' sur quelques champs? Merci


beaucoup.


.



Avatar
bonnie2424
excusez moi, mais j'ai dû mal m'exprimer car la requête que Tom me propose
est assez incompréhensible du fait que je ne selectionne que sur une table

La table compteur contients les champs suivant : matricule, date, service,
compteur 1, compteur2, service.


"Tom" a écrit dans le message de
news:1858f01c41b09$25947b40$
select [matricule],[date],[service],[compteur1],
[compteur2]
from COMPTEUR
where [date] (
select MAX([date])
from COMPTEUR COMPTEUR2
where COMPTEUR2.[matricule] = TaTable.
[matricule]
and COMPTEUR2.[service] = TaTable.
[service]
)

-----Message d'origine-----
bonjour,

j'aimerai votre aide sur une requête sql. Elle a l'air


toute simple, mais je
suis bloquée, je suis novice en sql, si quelqu'un


pouvais m'apporter la
solution, ça serai gentil.
J'ai essayé plusieurs requêtes différentes mais aucune


ne donne le résultat
escompté.

Voilà, je dois sélectionner seulement sur une table


appelée COMPTEUR

Elle regroupe des données de matricule, service, date,


compteur 1 et
compteur2 que je veux afficher

-->Les données se présente de la façon suivante :

[matricule] [date] [service]


[compteur1] [compteur2]
8562 12/03/04 1


5621 2663
8562 13/03/04 1


56263 6485
8562 14/03/04 1


56318 466
8562 15/03/04 1


56335 541
0328 11/03/04 2


5632 55339
0328 12/03/04 2


3315 3852
0328 13/03/04 2


555 4785
0328 14/03/04 2


4556 556632
1200 11/03/04 1


53 6552
1200 12/04/04 1


45 5568
1200 13/04/04 1


53636 8584

Le matricule est une clé primaire, service une clé


étrangère.
Je voudrais sélectionner seulement les matricules, date,


service, compteur 1
et compteur2 les plus récents c'est à dire les lignes 4,


8 et 11.

Comment procéder? j'ai essayé de faire un 'select


distinct matricule, date,
service, compteur 1, compteur 2 from compteur' mais ça


fonctionne pas, ça
renvoie tous les enregistrements. Par contre un 'select


distinct
matricule,max(date), service from compteur' me renvoie


les dernières lignes
comme voulu mais lorsqu'on rajoute les compteurs rien ne


va plus.

Comment faire un 'distinct' sur quelques champs? Merci


beaucoup.


.



Avatar
Tom
J'avais laissé le nom d'une table de test ...
Et comme ça ?

select [matricule],[date],[service],[compteur1],
[compteur2]
from COMPTEUR
where [date] =
(
select MAX([date])
from COMPTEUR COMPTEUR2
where COMPTEUR2.[matricule] = COMPTEUR.[matricule]
and COMPTEUR2.[service] = COMPTEUR.[service]
)

-----Message d'origine-----
excusez moi, mais j'ai dû mal m'exprimer car la requête


que Tom me propose
est assez incompréhensible du fait que je ne selectionne


que sur une table

La table compteur contients les champs suivant :


matricule, date, service,
compteur 1, compteur2, service.


"Tom" a écrit dans


le message de
news:1858f01c41b09$25947b40$
select [matricule],[date],[service],[compteur1],
[compteur2]
from COMPTEUR
where [date] =
(
select MAX([date])
from COMPTEUR COMPTEUR2
where COMPTEUR2.[matricule] = TaTable.
[matricule]
and COMPTEUR2.[service] = TaTable.
[service]
)

-----Message d'origine-----
bonjour,

j'aimerai votre aide sur une requête sql. Elle a l'air


toute simple, mais je
suis bloquée, je suis novice en sql, si quelqu'un


pouvais m'apporter la
solution, ça serai gentil.
J'ai essayé plusieurs requêtes différentes mais aucune


ne donne le résultat
escompté.

Voilà, je dois sélectionner seulement sur une table


appelée COMPTEUR

Elle regroupe des données de matricule, service, date,


compteur 1 et
compteur2 que je veux afficher

-->Les données se présente de la façon suivante :

[matricule] [date] [service]


[compteur1] [compteur2]
8562 12/03/04 1


5621 2663
8562 13/03/04 1


56263 6485
8562 14/03/04 1


56318 466
8562 15/03/04 1


56335 541
0328 11/03/04 2


5632 55339
0328 12/03/04 2


3315 3852
0328 13/03/04 2


555 4785
0328 14/03/04 2


4556 556632
1200 11/03/04 1


53 6552
1200 12/04/04 1


45 5568
1200 13/04/04 1


53636 8584

Le matricule est une clé primaire, service une clé


étrangère.
Je voudrais sélectionner seulement les matricules, date,


service, compteur 1
et compteur2 les plus récents c'est à dire les lignes 4,


8 et 11.

Comment procéder? j'ai essayé de faire un 'select


distinct matricule, date,
service, compteur 1, compteur 2 from compteur' mais ça


fonctionne pas, ça
renvoie tous les enregistrements. Par contre un 'select


distinct
matricule,max(date), service from compteur' me renvoie


les dernières lignes
comme voulu mais lorsqu'on rajoute les compteurs rien ne


va plus.

Comment faire un 'distinct' sur quelques champs? Merci


beaucoup.


.





.



Avatar
Michel Walsh
Salut,


Une autre façon qui a le seul avantage d'être entièrement
représentable dans l'éditeur graphique:


SELECT a.matricule, a.date, a.compteur1, a.compteur2
FROM compteur As a INNER JOIN compteur As b
ON a.matricule = b.matricule
GROUP BY a.matricule, a.date, a.compteur1, a.compteur2
HAVING a.date=MAX(b.date)




Espérant être utile,
Vanderghast, Access MVP



Pour info, pour ceux qui "pestent" contre l'aggrégat LAST de Jet: ce
dernier permet d'accélérer le processus, non pas parce qu'il réfère à
l'enregistrement le plus récent, ce n'est pas du tout sa signification, LAST
signifie "du dernier enregistrement, acceptable par le groupe, tel que vu
par l'actuel plan d'exécution", mais bien parce qu'il signifie, par
corroloraire à sa définition, "qui provient du même enregistrement":


SELECT a.matricule, a.date, LAST(a.compteur1), LAST(a.compteur2)
FROM compteur As a INNER JOIN compteur As b
ON a.matricule = b.matricule
GROUP BY a.matricule, a.date
HAVING a.date=MAX(b.date)


ce qui nous laisse avec un GROUP BY plus restreint. Évidemment, si on fait
une hypothèse qu'il n'y a pas de doublons (matricule, date), alors on peut
remplacer, dans ce cas, LAST par MIN, MAX, ou SUM... ils opèrent sur un seul
même enregistrement, le seul du groupe, dans ce cas, et conservent un GROUP
BY réduit:

SELECT a.matricule, a.date, SUM(a.compteur1), SUM(a.compteur2)
FROM compteur As a INNER JOIN compteur As b
ON a.matricule = b.matricule
GROUP BY a.matricule, a.date
HAVING a.date=MAX(b.date)


Voilà. Tout cela pour prendre la défense de LAST... le mal aimé :-)






"Tom" wrote in message
news:1436601c41bad$11e1cf40$
J'avais laissé le nom d'une table de test ...
Et comme ça ?

select [matricule],[date],[service],[compteur1],
[compteur2]
from COMPTEUR
where [date] (
select MAX([date])
from COMPTEUR COMPTEUR2
where COMPTEUR2.[matricule] = COMPTEUR.[matricule]
and COMPTEUR2.[service] = COMPTEUR.[service]
)

-----Message d'origine-----
excusez moi, mais j'ai dû mal m'exprimer car la requête


que Tom me propose
est assez incompréhensible du fait que je ne selectionne


que sur une table

La table compteur contients les champs suivant :


matricule, date, service,
compteur 1, compteur2, service.


"Tom" a écrit dans


le message de
news:1858f01c41b09$25947b40$
select [matricule],[date],[service],[compteur1],
[compteur2]
from COMPTEUR
where [date] >(
select MAX([date])
from COMPTEUR COMPTEUR2
where COMPTEUR2.[matricule] = TaTable.
[matricule]
and COMPTEUR2.[service] = TaTable.
[service]
)

-----Message d'origine-----
bonjour,

j'aimerai votre aide sur une requête sql. Elle a l'air


toute simple, mais je
suis bloquée, je suis novice en sql, si quelqu'un


pouvais m'apporter la
solution, ça serai gentil.
J'ai essayé plusieurs requêtes différentes mais aucune


ne donne le résultat
escompté.

Voilà, je dois sélectionner seulement sur une table


appelée COMPTEUR

Elle regroupe des données de matricule, service, date,


compteur 1 et
compteur2 que je veux afficher

-->Les données se présente de la façon suivante :

[matricule] [date] [service]


[compteur1] [compteur2]
8562 12/03/04 1


5621 2663
8562 13/03/04 1


56263 6485
8562 14/03/04 1


56318 466
8562 15/03/04 1


56335 541
0328 11/03/04 2


5632 55339
0328 12/03/04 2


3315 3852
0328 13/03/04 2


555 4785
0328 14/03/04 2


4556 556632
1200 11/03/04 1


53 6552
1200 12/04/04 1


45 5568
1200 13/04/04 1


53636 8584

Le matricule est une clé primaire, service une clé


étrangère.
Je voudrais sélectionner seulement les matricules, date,


service, compteur 1
et compteur2 les plus récents c'est à dire les lignes 4,


8 et 11.

Comment procéder? j'ai essayé de faire un 'select


distinct matricule, date,
service, compteur 1, compteur 2 from compteur' mais ça


fonctionne pas, ça
renvoie tous les enregistrements. Par contre un 'select


distinct
matricule,max(date), service from compteur' me renvoie


les dernières lignes
comme voulu mais lorsqu'on rajoute les compteurs rien ne


va plus.

Comment faire un 'distinct' sur quelques champs? Merci


beaucoup.


.





.



Avatar
bonnie2424
ça fonctionne très bien,

merci beaucoup!


"Michel Walsh" a écrit dans le message
de news:%
Salut,


Une autre façon qui a le seul avantage d'être entièrement
représentable dans l'éditeur graphique:


SELECT a.matricule, a.date, a.compteur1, a.compteur2
FROM compteur As a INNER JOIN compteur As b
ON a.matricule = b.matricule
GROUP BY a.matricule, a.date, a.compteur1, a.compteur2
HAVING a.date=MAX(b.date)




Espérant être utile,
Vanderghast, Access MVP



Pour info, pour ceux qui "pestent" contre l'aggrégat LAST de Jet: ce
dernier permet d'accélérer le processus, non pas parce qu'il réfère à
l'enregistrement le plus récent, ce n'est pas du tout sa signification,


LAST
signifie "du dernier enregistrement, acceptable par le groupe, tel que vu
par l'actuel plan d'exécution", mais bien parce qu'il signifie, par
corroloraire à sa définition, "qui provient du même enregistrement":


SELECT a.matricule, a.date, LAST(a.compteur1), LAST(a.compteur2)
FROM compteur As a INNER JOIN compteur As b
ON a.matricule = b.matricule
GROUP BY a.matricule, a.date
HAVING a.date=MAX(b.date)


ce qui nous laisse avec un GROUP BY plus restreint. Évidemment, si on fait
une hypothèse qu'il n'y a pas de doublons (matricule, date), alors on


peut
remplacer, dans ce cas, LAST par MIN, MAX, ou SUM... ils opèrent sur un


seul
même enregistrement, le seul du groupe, dans ce cas, et conservent un


GROUP
BY réduit:

SELECT a.matricule, a.date, SUM(a.compteur1), SUM(a.compteur2)
FROM compteur As a INNER JOIN compteur As b
ON a.matricule = b.matricule
GROUP BY a.matricule, a.date
HAVING a.date=MAX(b.date)


Voilà. Tout cela pour prendre la défense de LAST... le mal aimé :-)






"Tom" wrote in message
news:1436601c41bad$11e1cf40$
J'avais laissé le nom d'une table de test ...
Et comme ça ?

select [matricule],[date],[service],[compteur1],
[compteur2]
from COMPTEUR
where [date] > (
select MAX([date])
from COMPTEUR COMPTEUR2
where COMPTEUR2.[matricule] = COMPTEUR.[matricule]
and COMPTEUR2.[service] = COMPTEUR.[service]
)

>-----Message d'origine-----
>excusez moi, mais j'ai dû mal m'exprimer car la requête
que Tom me propose
>est assez incompréhensible du fait que je ne selectionne
que sur une table
>
>La table compteur contients les champs suivant :
matricule, date, service,
>compteur 1, compteur2, service.
>
>
>"Tom" a écrit dans
le message de
>news:1858f01c41b09$25947b40$
>select [matricule],[date],[service],[compteur1],
>[compteur2]
>from COMPTEUR
>where [date] > >(
>select MAX([date])
>from COMPTEUR COMPTEUR2
>where COMPTEUR2.[matricule] = TaTable.
>[matricule]
>and COMPTEUR2.[service] = TaTable.
>[service]
>)
>
>>-----Message d'origine-----
>>bonjour,
>>
>>j'aimerai votre aide sur une requête sql. Elle a l'air
>toute simple, mais je
>>suis bloquée, je suis novice en sql, si quelqu'un
>pouvais m'apporter la
>>solution, ça serai gentil.
>>J'ai essayé plusieurs requêtes différentes mais aucune
>ne donne le résultat
>>escompté.
>>
>>Voilà, je dois sélectionner seulement sur une table
>appelée COMPTEUR
>>
>>Elle regroupe des données de matricule, service, date,
>compteur 1 et
>>compteur2 que je veux afficher
>>
>>-->Les données se présente de la façon suivante :
>>
>>[matricule] [date] [service]
>[compteur1] [compteur2]
>>8562 12/03/04 1
>5621 2663
>>8562 13/03/04 1
>56263 6485
>>8562 14/03/04 1
>56318 466
>>8562 15/03/04 1
>56335 541
>>0328 11/03/04 2
>5632 55339
>>0328 12/03/04 2
>3315 3852
>>0328 13/03/04 2
>555 4785
>>0328 14/03/04 2
>4556 556632
>>1200 11/03/04 1
>53 6552
>>1200 12/04/04 1
>45 5568
>>1200 13/04/04 1
>53636 8584
>>
>>Le matricule est une clé primaire, service une clé
>étrangère.
>>Je voudrais sélectionner seulement les matricules, date,
>service, compteur 1
>>et compteur2 les plus récents c'est à dire les lignes 4,
>8 et 11.
>>
>>Comment procéder? j'ai essayé de faire un 'select
>distinct matricule, date,
>>service, compteur 1, compteur 2 from compteur' mais ça
>fonctionne pas, ça
>>renvoie tous les enregistrements. Par contre un 'select
>distinct
>>matricule,max(date), service from compteur' me renvoie
>les dernières lignes
>>comme voulu mais lorsqu'on rajoute les compteurs rien ne
>va plus.
>>
>>Comment faire un 'distinct' sur quelques champs? Merci
>beaucoup.
>>
>>
>>.
>>
>
>
>.
>