OVH Cloud OVH Cloud

[WD8] Recherche SQL sur plage de dates

4 réponses
Avatar
mat
Bonjour,

Je ne parviens pas à trouver un moyen de récupérer un enregistrement se
basant sur une plage de dates. C'est du SQL sur HF, mais si quelqu'un
aurait une solution pour une autre base, je peux éventuellement
l'adapter.

// Description fichier A
fichierA.Date
fichierA.CléFichierB

// Description fichier B: les valeurs de la rubriqueCherchée changent de
temps en temps
// et sont enregistrés sous la date du jour. Il n'y a donc pas de
liaison
// directe entre A.Date et B.Date
fichierB.Clé
fichierB.Date
fichierB.RubriqueCherchée

// il faut trouver la rubriqueCherchée de B avec une date égale ou
//inférieure de A.Date
SELECT A.Date, B.Clé, B.RubriqueCherchée
// ceci ne marche pas
FROM A INNER JOIN B ON (A.CléFichierB = B.Clé AND B.Date <= A.Date)

// ceci ne marche non plus
FROM A INNER JOIN B ON (A.CléFichierB = B.Clé)
AND A.date >= (select bottom 1 B.DATE from B WHERE B.Clé = A.CléFichierB
AND B.Date <= A.date)


Merci et salutations
mat

4 réponses

Avatar
mat
petite correction, l'exemple n'étant pas une copie complète de ma
requête:

// ceci ne marche non plus
FROM A INNER JOIN B ON (A.CléFichierB = B.Clé)
WHERE A.date >= (select bottom 1 B.DATE from B WHERE B.Clé A.CléFichierB AND B.Date <= A.date)
Avatar
Roumegou Eric
mat a couché sur son écran :
petite correction, l'exemple n'étant pas une copie complète de ma
requête:

// ceci ne marche non plus
FROM A INNER JOIN B ON (A.CléFichierB = B.Clé)
WHERE A.date >= (select bottom 1 B.DATE from B WHERE B.Clé > A.CléFichierB AND B.Date <= A.date)



pas sur d'avoir tout compris mais je mettrais
Select fichierB.RubriqueCherchée
from fichierA inner join FichierB on FichierA.CleFichierB=FichierB.cle
where fichierB.Date <= fichierA.Date

--
Eric Roumégou
http://cerbermail.com/?TSoulBerPA
(cliquez sur le lien ci-dessus pour me contacter en privé)
Avatar
mat
Roumegou Eric wrote:
mat a couché sur son écran :

petite correction, l'exemple n'étant pas une copie complète de ma
requête:

// ceci ne marche non plus
FROM A INNER JOIN B ON (A.CléFichierB = B.Clé)
WHERE A.date >= (select bottom 1 B.DATE from B WHERE B.Clé >> A.CléFichierB AND B.Date <= A.date)




pas sur d'avoir tout compris mais je mettrais
Select fichierB.RubriqueCherchée
from fichierA inner join FichierB on FichierA.CleFichierB=FichierB.cle
where fichierB.Date <= fichierA.Date




Merci Eric, malheureusement ça ne me donne pas le résultat voulu. En
effet, j'aurais du préciser d'avantage:
Voici ma réponse sur la ML sur une solution similaire:

En HF ça donne

select A.CléFichierB, A.Date, B.Clé, B.date, B.RubriqueCherchée
from A, B
where A.CléFichierB = B.Clé
and A.date >= B.date

ça passe, mais la date retourné pour le fichier A n'a rien à voir avec
la vraie date de l'enregistrement, donc la liaison n'est pas bonne. En
plus, je n'étais pas assez précis dans mon premier message: je ne veux
que la valeur du premier enregistrement du fichier B ayant une date
égale ou inférieure à celle du fichier A.


En somme, je voudrais que dans la situation suivante

A.Enr A.Date A.CléB
1 03/01/2005 1
2 15/02/2005 1

B.Date B.Clé B.RubCherchée
01/12/2004 1 1.25
01/01/2005 1 1.20
01/02/2005 1 1.15

la requête me retourne 1.20 pour l'enregistrement 1 du fichier A et 1.15
pour l'enregistrement 2.

J'espère que c'est plus claire maintenant.

Merci et salutations
mat
Avatar
Roumegou Eric
mat a écrit :
Roumegou Eric wrote:
mat a couché sur son écran :

petite correction, l'exemple n'étant pas une copie complète de ma
requête:

// ceci ne marche non plus
FROM A INNER JOIN B ON (A.CléFichierB = B.Clé)
WHERE A.date >= (select bottom 1 B.DATE from B WHERE B.Clé >>> A.CléFichierB AND B.Date <= A.date)




pas sur d'avoir tout compris mais je mettrais
Select fichierB.RubriqueCherchée
from fichierA inner join FichierB on FichierA.CleFichierB=FichierB.cle
where fichierB.Date <= fichierA.Date




Merci Eric, malheureusement ça ne me donne pas le résultat voulu. En effet,
j'aurais du préciser d'avantage:
Voici ma réponse sur la ML sur une solution similaire:

En HF ça donne

select A.CléFichierB, A.Date, B.Clé, B.date, B.RubriqueCherchée
from A, B
where A.CléFichierB = B.Clé
and A.date >= B.date

ça passe, mais la date retourné pour le fichier A n'a rien à voir avec
la vraie date de l'enregistrement, donc la liaison n'est pas bonne.



très inquiétant si la liaison n'est pas bonne ???
meme en HF le inner join doit marcher non ?
Ta syntaxe correspondrait plus à une jointure oracle (pre 9i, car le
inner join est possible depuis la 9)


En plus, je n'étais pas assez précis dans mon premier message: je ne veux
que la valeur du premier enregistrement du fichier B ayant une date
égale ou inférieure à celle du fichier A.



Ah ? alors en mysql un limit 1 et un order by, ça le ferait ... mais en
HF, je sais pas, jamais mis mon nez :')



En somme, je voudrais que dans la situation suivante

A.Enr A.Date A.CléB
1 03/01/2005 1
2 15/02/2005 1

B.Date B.Clé B.RubCherchée
01/12/2004 1 1.25
01/01/2005 1 1.20
01/02/2005 1 1.15

la requête me retourne 1.20 pour l'enregistrement 1 du fichier A et 1.15 pour
l'enregistrement 2.

J'espère que c'est plus claire maintenant.

Merci et salutations
mat



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