J'aimerais extraire d'une table, comportant un mois, un idPersone et un
montant, soit les champs idMois, idPerson, Mnt, les 8 plus grands
montants de chaque personne parmi les 12 mois.
Donc ma requete devrait avoir au max 8 lignes par personne.
--en effet elle s'arrête ici alors qu'il y a un ex aequo ! --> 18 5 331.83999999999997 43 8 225.47999999999999 21 4 175.84999999999999 21 1 125.84999999999999 5 5 125.43000000000001 1 3 123.45
--seconde solution, relationnelle, mais qui intègre (ou non) les ex aequo :
SELECT T1.PRS_ID, T1.MOI_ID, COUNT(T2.PRS_ID) FROM T_HUIT_HUI T1 LEFT OUTER JOIN T_HUIT_HUI T2 ON T1.HUI_MONTANT < T2.HUI_MONTANT GROUP BY T1.PRS_ID, T1.MOI_ID HAVING COUNT(T2.PRS_ID) < 8 ORDER BY 3
-- Frédéric BROUARD - MVP SQL Server, expert SGBDR & SQL Le site SQL et les SGBDR http://sqlpro.developpez.com Audit, conseil, formation, modélisation, optimisation => http://www.datasapiens.com
"Amirallia" a écrit :
Bonjour,
J'aimerais extraire d'une table, comportant un mois, un idPersone et un montant, soit les champs idMois, idPerson, Mnt, les 8 plus grands montants de chaque personne parmi les 12 mois.
Donc ma requete devrait avoir au max 8 lignes par personne.
--en effet elle s'arrête ici alors qu'il y a un ex aequo !
-->
18 5 331.83999999999997
43 8 225.47999999999999
21 4 175.84999999999999
21 1 125.84999999999999
5 5 125.43000000000001
1 3 123.45
--seconde solution, relationnelle, mais qui intègre (ou non) les ex aequo :
SELECT T1.PRS_ID, T1.MOI_ID, COUNT(T2.PRS_ID)
FROM T_HUIT_HUI T1
LEFT OUTER JOIN T_HUIT_HUI T2
ON T1.HUI_MONTANT < T2.HUI_MONTANT
GROUP BY T1.PRS_ID, T1.MOI_ID
HAVING COUNT(T2.PRS_ID) < 8
ORDER BY 3
--
Frédéric BROUARD - MVP SQL Server, expert SGBDR & SQL
Le site SQL et les SGBDR http://sqlpro.developpez.com
Audit, conseil, formation, modélisation, optimisation
=> http://www.datasapiens.com
"Amirallia" a écrit :
Bonjour,
J'aimerais extraire d'une table, comportant un mois, un idPersone et un
montant, soit les champs idMois, idPerson, Mnt, les 8 plus grands
montants de chaque personne parmi les 12 mois.
Donc ma requete devrait avoir au max 8 lignes par personne.
--en effet elle s'arrête ici alors qu'il y a un ex aequo ! --> 18 5 331.83999999999997 43 8 225.47999999999999 21 4 175.84999999999999 21 1 125.84999999999999 5 5 125.43000000000001 1 3 123.45
--seconde solution, relationnelle, mais qui intègre (ou non) les ex aequo :
SELECT T1.PRS_ID, T1.MOI_ID, COUNT(T2.PRS_ID) FROM T_HUIT_HUI T1 LEFT OUTER JOIN T_HUIT_HUI T2 ON T1.HUI_MONTANT < T2.HUI_MONTANT GROUP BY T1.PRS_ID, T1.MOI_ID HAVING COUNT(T2.PRS_ID) < 8 ORDER BY 3
-- Frédéric BROUARD - MVP SQL Server, expert SGBDR & SQL Le site SQL et les SGBDR http://sqlpro.developpez.com Audit, conseil, formation, modélisation, optimisation => http://www.datasapiens.com
"Amirallia" a écrit :
Bonjour,
J'aimerais extraire d'une table, comportant un mois, un idPersone et un montant, soit les champs idMois, idPerson, Mnt, les 8 plus grands montants de chaque personne parmi les 12 mois.
Donc ma requete devrait avoir au max 8 lignes par personne.
Une idée ?
Rudi Bruchez
SQLpro a écrit:
--en effet elle s'arrête ici alors qu'il y a un ex aequo ! -->
Bonjour,
Pour gérer le problème de l'ex aequo :
SELECT TOP 8 WITH TIES * FROM T_HUIT_HUI ORDER BY HUI_MONTANT DESC
-- Rudi Bruchez Consultant indépendant modélisation, administration, optimisation, Solutions MS SQL Server et informatique libre. MCDBA, SCJP2 http://www.babaluga.com/
SQLpro a écrit:
--en effet elle s'arrête ici alors qu'il y a un ex aequo !
-->
Bonjour,
Pour gérer le problème de l'ex aequo :
SELECT TOP 8 WITH TIES *
FROM T_HUIT_HUI
ORDER BY HUI_MONTANT DESC
--
Rudi Bruchez
Consultant indépendant
modélisation, administration, optimisation,
Solutions MS SQL Server et informatique libre.
MCDBA, SCJP2
http://www.babaluga.com/
--en effet elle s'arrête ici alors qu'il y a un ex aequo ! --> 18 5 331.83999999999997 43 8 225.47999999999999 21 4 175.84999999999999 21 1 125.84999999999999 5 5 125.43000000000001 1 3 123.45
--seconde solution, relationnelle, mais qui intègre (ou non) les ex aequo :
SELECT T1.PRS_ID, T1.MOI_ID, COUNT(T2.PRS_ID) FROM T_HUIT_HUI T1 LEFT OUTER JOIN T_HUIT_HUI T2 ON T1.HUI_MONTANT < T2.HUI_MONTANT GROUP BY T1.PRS_ID, T1.MOI_ID HAVING COUNT(T2.PRS_ID) < 8 ORDER BY 3
-- Frédéric BROUARD - MVP SQL Server, expert SGBDR & SQL Le site SQL et les SGBDR http://sqlpro.developpez.com Audit, conseil, formation, modélisation, optimisation => http://www.datasapiens.com
"Amirallia" a écrit :
Bonjour,
J'aimerais extraire d'une table, comportant un mois, un idPersone et un montant, soit les champs idMois, idPerson, Mnt, les 8 plus grands montants de chaque personne parmi les 12 mois.
Donc ma requete devrait avoir au max 8 lignes par personne.
Une idée ?
J'ai essayé la requete relationelle, mais j'obtiens que les 5 meilleures montants alors que j'ai 12 montant pour une personne(idPerso = 20420). Voici ma table :
--en effet elle s'arrête ici alors qu'il y a un ex aequo !
-->
18 5 331.83999999999997
43 8 225.47999999999999
21 4 175.84999999999999
21 1 125.84999999999999
5 5 125.43000000000001
1 3 123.45
--seconde solution, relationnelle, mais qui intègre (ou non) les ex aequo :
SELECT T1.PRS_ID, T1.MOI_ID, COUNT(T2.PRS_ID)
FROM T_HUIT_HUI T1
LEFT OUTER JOIN T_HUIT_HUI T2
ON T1.HUI_MONTANT < T2.HUI_MONTANT
GROUP BY T1.PRS_ID, T1.MOI_ID
HAVING COUNT(T2.PRS_ID) < 8
ORDER BY 3
--
Frédéric BROUARD - MVP SQL Server, expert SGBDR & SQL
Le site SQL et les SGBDR http://sqlpro.developpez.com
Audit, conseil, formation, modélisation, optimisation
=> http://www.datasapiens.com
"Amirallia" a écrit :
Bonjour,
J'aimerais extraire d'une table, comportant un mois, un idPersone et un
montant, soit les champs idMois, idPerson, Mnt, les 8 plus grands
montants de chaque personne parmi les 12 mois.
Donc ma requete devrait avoir au max 8 lignes par personne.
Une idée ?
J'ai essayé la requete relationelle, mais j'obtiens que les 5
meilleures montants alors que j'ai 12 montant pour une personne(idPerso
= 20420). Voici ma table :
--en effet elle s'arrête ici alors qu'il y a un ex aequo ! --> 18 5 331.83999999999997 43 8 225.47999999999999 21 4 175.84999999999999 21 1 125.84999999999999 5 5 125.43000000000001 1 3 123.45
--seconde solution, relationnelle, mais qui intègre (ou non) les ex aequo :
SELECT T1.PRS_ID, T1.MOI_ID, COUNT(T2.PRS_ID) FROM T_HUIT_HUI T1 LEFT OUTER JOIN T_HUIT_HUI T2 ON T1.HUI_MONTANT < T2.HUI_MONTANT GROUP BY T1.PRS_ID, T1.MOI_ID HAVING COUNT(T2.PRS_ID) < 8 ORDER BY 3
-- Frédéric BROUARD - MVP SQL Server, expert SGBDR & SQL Le site SQL et les SGBDR http://sqlpro.developpez.com Audit, conseil, formation, modélisation, optimisation => http://www.datasapiens.com
"Amirallia" a écrit :
Bonjour,
J'aimerais extraire d'une table, comportant un mois, un idPersone et un montant, soit les champs idMois, idPerson, Mnt, les 8 plus grands montants de chaque personne parmi les 12 mois.
Donc ma requete devrait avoir au max 8 lignes par personne.
Une idée ?
J'ai essayé la requete relationelle, mais j'obtiens que les 5 meilleures montants alors que j'ai 12 montant pour une personne(idPerso = 20420). Voici ma table :
>> SELECT TOP 8 WITH TIES * FROM T_HUIT_HUI ORDER BY HUI_MONTANT DESC
Que signifie le WITH TIES ?
Lorsque la requête comporte un ORDER BY, il permet d'inclure les dernières valeurs de colonnes de l'ORDER BY identiques. Dans le cas d'exemple, malgré le TOP 8, la requête retourne 9 valeurs, parce qu'il y a une valeur de HUI_MONTANT identique à la huitième ligne retournée.
-- Rudi Bruchez Consultant indépendant modélisation, administration, optimisation, Solutions MS SQL Server et informatique libre. MCDBA, SCJP2 http://www.babaluga.com/
>> SELECT TOP 8 WITH TIES *
FROM T_HUIT_HUI
ORDER BY HUI_MONTANT DESC
Que signifie le WITH TIES ?
Lorsque la requête comporte un ORDER BY, il permet d'inclure les dernières
valeurs de colonnes de l'ORDER BY identiques. Dans le cas d'exemple, malgré
le TOP 8, la requête retourne 9 valeurs, parce qu'il y a une valeur de
HUI_MONTANT identique à la huitième ligne retournée.
--
Rudi Bruchez
Consultant indépendant
modélisation, administration, optimisation,
Solutions MS SQL Server et informatique libre.
MCDBA, SCJP2
http://www.babaluga.com/
>> SELECT TOP 8 WITH TIES * FROM T_HUIT_HUI ORDER BY HUI_MONTANT DESC
Que signifie le WITH TIES ?
Lorsque la requête comporte un ORDER BY, il permet d'inclure les dernières valeurs de colonnes de l'ORDER BY identiques. Dans le cas d'exemple, malgré le TOP 8, la requête retourne 9 valeurs, parce qu'il y a une valeur de HUI_MONTANT identique à la huitième ligne retournée.
-- Rudi Bruchez Consultant indépendant modélisation, administration, optimisation, Solutions MS SQL Server et informatique libre. MCDBA, SCJP2 http://www.babaluga.com/