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

[WD75 206g] [Requete SQL]

3 réponses
Avatar
treu
Bonjour,

J'ai un fichier INDEX
IDINDEX est la clé primaire ( UNIQUE )
DateValeur est une date
DateSystem est une date
ValeurIndex est un monétaire
IDINDICE est une clé étrangère du fichier INDICE : INDICE (0/n) <---> INDEX
(1/1)
IDINDEX_CLECOMP est une clé composé ( UNIQUE ) de IDINDICE + DateValeur +
DateSystem

Je peux donc avoir les records suivant dans INDEX :

1 31/12/2002 31/12/2002 100.00 58 58,20021231,20021231
2 31/12/2002 31/12/2002 104.00 62 62,20021231,20021231
3 31/01/2003 31/01/2003 102.75 58 58,20030131,20030131
4 31/01/2003 31/01/2003 104.56 62 62,20030131,20030131
5 31/12/2002 05/02/2003 100.28 58 58,20021231,20030205
6 31/12/2002 05/02/2003 104.17 62 62,20021231,20030205

Pour INDICE 58, j'ai donc 2 valeurs au 31/12/2002 ( 100.00 et 100.28 ) ainsi
que 1 valeur au 31/01/2003 ( 102.75 )
Pour INDICE 62, j'ai donc 2 valeurs au 31/12/2002 ( 104.00 et 104.17 ) ainsi
que 1 valeur au 31/01/2003 ( 104.56 )

Il me faudrait une requête SQL qui me donne la liste de tous les INDEX pour
un indice connu MAIS en ne prenant que 1 seule valeur par DateValeur (
prendre le record dont la DateSystem est la plus grande ).

En gros,
pour INDICE 58 j'aimerais le résultat suivant : record 5 et record 3
pour INDICE 62 j'aimerais le résultat suivant : record 6 et record 4

Comment faire ?
Merci d'avance.


Avec mes meilleures salutations


M P I S A
Management de Projets Informatiques
Solutions et gestion pour la Prévoyance Institutionnelle

Gauthier TREU
Direction projets AS/400, WinDev
mailto:treu@mpisa.ch
http://www.mpisa.ch
Tél. : 022 / 345 66 44
Fax : 022 / 344.76.06


@@@@@@@@@@@@@@@@@@@@@@@@
NEW : notre site a changé, visitez-le : www.mpisa.ch
@@@@@@@@@@@@@@@@@@@@@@@@

3 réponses

Avatar
Roumegou
"Jean Cherche" a utilisé son clavier pour écrire :
Bonjour,

J'ai un fichier INDEX
IDINDEX est la clé primaire ( UNIQUE )
DateValeur est une date
DateSystem est une date
ValeurIndex est un monétaire
IDINDICE est une clé étrangère du fichier INDICE : INDICE (0/n) <---> INDEX
(1/1)
IDINDEX_CLECOMP est une clé composé ( UNIQUE ) de IDINDICE + DateValeur +
DateSystem

Je peux donc avoir les records suivant dans INDEX :

1 31/12/2002 31/12/2002 100.00 58 58,20021231,20021231
2 31/12/2002 31/12/2002 104.00 62 62,20021231,20021231
3 31/01/2003 31/01/2003 102.75 58 58,20030131,20030131
4 31/01/2003 31/01/2003 104.56 62 62,20030131,20030131
5 31/12/2002 05/02/2003 100.28 58 58,20021231,20030205
6 31/12/2002 05/02/2003 104.17 62 62,20021231,20030205

Pour INDICE 58, j'ai donc 2 valeurs au 31/12/2002 ( 100.00 et 100.28 ) ainsi
que 1 valeur au 31/01/2003 ( 102.75 )
Pour INDICE 62, j'ai donc 2 valeurs au 31/12/2002 ( 104.00 et 104.17 ) ainsi
que 1 valeur au 31/01/2003 ( 104.56 )

Il me faudrait une requête SQL qui me donne la liste de tous les INDEX pour
un indice connu MAIS en ne prenant que 1 seule valeur par DateValeur (
prendre le record dont la DateSystem est la plus grande ).



Oulah, j'ai déjà cherché ce type de requête pour finir par une solution
programmée.
car un SELECT Test1.IDINDICE, Test1.DateValeur, First(Test1.IDINDEX) AS
PremierDeIDINDEX
FROM Test1
GROUP BY Test1.IDINDICE, Test1.DateValeur

D'abord je ne sais pas si ton moteur SQL l'acceptera; et ensuite il
n'est pas possible de trier sur DateSysteme si cela ne fait pas partie
de ton agrégat.
Donc le plus simple, c'est de prendre tous les enreg et d'agir par
rupture

Ou d'essayer une requête imbriquée.

En gros,
pour INDICE 58 j'aimerais le résultat suivant : record 5 et record 3
pour INDICE 62 j'aimerais le résultat suivant : record 6 et record 4

Comment faire ?
Merci d'avance.


Avec mes meilleures salutations


M P I S A
Management de Projets Informatiques
Solutions et gestion pour la Prévoyance Institutionnelle

Gauthier TREU
Direction projets AS/400, WinDev
mailto:
http://www.mpisa.ch
Tél. : 022 / 345 66 44
Fax : 022 / 344.76.06


@@@@@@@@@@@@@@@@@@@@@@@@
NEW : notre site a changé, visitez-le : www.mpisa.ch
@@@@@@@@@@@@@@@@@@@@@@@@



--
Eric Roumegou
http://cerbermail.com/?Wk2D8D62KI
(cliquez sur le lien ci-dessus pour me contacter en privé)
Avatar
treu
J'AI LA REPONSE ...

SOIT LA REQUETE SUIVANTE : ( RQS_TEST_INDEX1 )
SELECT INDEX.IDINDICE AS IDINDICE,
INDEX.DateValeur AS DateValeur,
MAX(INDEX.DateSysteme) AS MaxDateSysteme
FROM INDEX
WHERE IDINDICE = {peIdIndice}
AND DATEVALEUR = {pdDateValeur}
GROUP BY IDINDICE, DateValeur

SOIT LA REQUETE SUIVANTE : ( RQS_TEST_INDEX2 )
SELECT
A.IDINDEX,
A.CodeInTProvenanceCours,
A.DateValeur AS DATEVALEURXX,
A.Index,
A.DateSysteme,
A.HeureSysteme,
A.IDINDICE AS INDICEXX
FROM INDEX A
INNER JOIN RQS_TEST_INDEX1 B
ON A.IDINDICE = B.IDINDICE
AND A.DATEVALEUR = B.DATEVALEUR
AND A.DATESYSTEME = B.MAXDATESYSTEME
ORDER BY
INDICEXX,
DATEVALEURXX


FAIRE :
RQS_TEST_INDEX1.peIdIndice = 58
RQS_TEST_INDEX1.pdDateValeur = Null

HExécuteRequête(RQS_TEST_INDEX1,hRequêteDéfaut)
HExécuteRequête(RQS_TEST_INDEX2,hRequêteDéfaut)


REMARQUES :
Sur une VRAI base de données Client/Serveur ( genre SQL Serveur 2000
ou Oracle ou DB2 ), il aurait été possible de faire ça en 1 requête
avec sous-requête MAIS avec HF 7, je n'y suis pas arrivé ( erreur HF,
etc... )
De plus, allez savoir pourquoi on ne peut pas mettre A.DateValeur et
A.IDINDICE dans la clause ORDER BY !!!!!

Jean Chieeeeeee


(Jean Cherche) wrote in message news:...
Bonjour,

J'ai un fichier INDEX
IDINDEX est la clé primaire ( UNIQUE )
DateValeur est une date
DateSystem est une date
ValeurIndex est un monétaire
IDINDICE est une clé étrangère du fichier INDICE : INDICE (0/n) <---> INDEX
(1/1)
IDINDEX_CLECOMP est une clé composé ( UNIQUE ) de IDINDICE + DateValeur +
DateSystem

Je peux donc avoir les records suivant dans INDEX :

1 31/12/2002 31/12/2002 100.00 58 58,20021231,20021231
2 31/12/2002 31/12/2002 104.00 62 62,20021231,20021231
3 31/01/2003 31/01/2003 102.75 58 58,20030131,20030131
4 31/01/2003 31/01/2003 104.56 62 62,20030131,20030131
5 31/12/2002 05/02/2003 100.28 58 58,20021231,20030205
6 31/12/2002 05/02/2003 104.17 62 62,20021231,20030205

Pour INDICE 58, j'ai donc 2 valeurs au 31/12/2002 ( 100.00 et 100.28 ) ainsi
que 1 valeur au 31/01/2003 ( 102.75 )
Pour INDICE 62, j'ai donc 2 valeurs au 31/12/2002 ( 104.00 et 104.17 ) ainsi
que 1 valeur au 31/01/2003 ( 104.56 )

Il me faudrait une requête SQL qui me donne la liste de tous les INDEX pour
un indice connu MAIS en ne prenant que 1 seule valeur par DateValeur (
prendre le record dont la DateSystem est la plus grande ).

En gros,
pour INDICE 58 j'aimerais le résultat suivant : record 5 et record 3
pour INDICE 62 j'aimerais le résultat suivant : record 6 et record 4

Comment faire ?
Merci d'avance.


Avec mes meilleures salutations


M P I S A
Management de Projets Informatiques
Solutions et gestion pour la Prévoyance Institutionnelle

Gauthier TREU
Direction projets AS/400, WinDev
mailto:
http://www.mpisa.ch
Tél. : 022 / 345 66 44
Fax : 022 / 344.76.06


@@@@@@@@@@@@@@@@@@@@@@@@
NEW : notre site a changé, visitez-le : www.mpisa.ch
@@@@@@@@@@@@@@@@@@@@@@@@


Avatar
Roumegou
> REMARQUES :
Sur une VRAI base de données Client/Serveur ( genre SQL Serveur 2000
ou Oracle ou DB2 ), il aurait été possible de faire ça en 1 requête
avec sous-requête MAIS avec HF 7, je n'y suis pas arrivé ( erreur HF,
etc... )
De plus, allez savoir pourquoi on ne peut pas mettre A.DateValeur et
A.IDINDICE dans la clause ORDER BY !!!!!



Voilà pourquoi il faut travailler avec ces SGBD et non avec HF et en
Sql Natif et pas en ordre H.
Sinon dans ta liste, tu as oublié mySQL meme si tu dois attendre la 4.1
(qui est en béta) pour les sous requetes.
Eric

--
Eric Roumegou
http://cerbermail.com/?Wk2D8D62KI
(cliquez sur le lien ci-dessus pour me contacter en privé)