Unlock a world of possibilities! Login now and discover the exclusive benefits awaiting you.
Bonjour,
je cherche à reproduire cela en script:
Create table #table(DIVI varchar(3), Code_devise varchar(3), DateValidite_Devise datetime, Taux_devise decimal(15,5))
INSERT into #table
Select '1Z0', 'USD', '2015-01-01 00:00:00.000', 1.30
UNION ALL Select '1Z0', 'USD', '2015-02-01 00:00:00.000', 1.20
UNION ALL Select '1Z0', 'USD', '2015-03-01 00:00:00.000', 1.10
UNION ALL Select '1Z0', 'USD', '2015-04-01 00:00:00.000', 1.00
UNION ALL Select '1Z0', 'GBP', '2015-01-01 00:00:00.000', 0.9
UNION ALL Select '1Z0', 'GBP', '2015-03-01 00:00:00.000', 0.95
UNION ALL Select 'AAA', 'USD', '2015-01-01 00:00:00.000', 1.00
Select DIVI
,Code_devise
,Taux_devise
, DateValidite_Devise as StartDate
, (
SELECT ISNULL(MIN(EndTable.DateValidite_Devise),'2099-01-01 00:00:00.000')
from #table EndTable
WHERE StartTable.DIVI = EndTable.DIVI
AND StartTable.Code_devise = EndTable.Code_devise
AND StartTable.DateValidite_Devise < EndTable.DateValidite_Devise
) AS EndDate
from #table StartTable
--WHERE StartTable.DateValidite_Devise = '2015-03-01 00:00:00.000'
DROP table #table
Donc j'ai une table avec une date de début et sans date de fin.
La date de fin d'une période est la date de début de la suivante.
Je cherche donc à créer une table qui contient les 2 informations, la date de début et celle de fin.
Dans mon script j'ai:
devises:
LOAD
CUDIVI as %DIVI,
CUCUCD as Code_devise,
date#(CUCUTD,'YYYYMMDD') as DateValidité_Devise,
CUARAT as Taux_devise
FROM CCURRA.QVD (qvd)
WHERE
CUCRTP=4
;
Fin:
LOAD
Text(%DIVI)&Code_devise as clef,
%DIVI as %DIVIFin,
Code_devise as Code_deviseFin,
DateValidité_Devise as DateValidité_DeviseFin,
Taux_devise as Taux_deviseFin
Resident devises
;
Debut:
LOAD
Text(%DIVI)&Code_devise as clef,
%DIVI as %DIVIDebut,
Code_devise as Code_deviseDebut,
DateValidité_Devise as DateValidité_DeviseDebut,
Taux_devise as Taux_deviseDebut
Resident devises
;
TmpLien:
INNER JOIN (Debut)
IntervalMatch(DateValidité_DeviseDebut)
LOAD 0, DateValidité_DeviseFin
Resident Fin
WHERE clef = '1Z0CHF'
AND DateValidité_DeviseDebut = DateValidité_DeviseFin
;
Mais le problème est que:
- soit j'arrive à faire une jointure par Homonimie
- soit par IntervalMatch
Peut on faire les deux en même temps ?
Avez vous autre chose à me proposer pour parvenir à mon résultat ?
Merci,
Willy
Hello,
thank you for the quick answer.
Creating a Date Interval from a Single Date was perfect for me.
Regards,
Willy