Skip to main content
Announcements
Join us at Qlik Connect for 3 magical days of learning, networking,and inspiration! REGISTER TODAY and save!
cancel
Showing results for 
Search instead for 
Did you mean: 
Not applicable

Créer une jointure avec IntervalMatch + une clef

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

2 Replies
Not applicable
Author

Hello,

thank you for the quick answer.

Creating a Date Interval from a Single Date was perfect for me.

Regards,

Willy