Quiz: Dati Temporali all'opera

Oggi Alberto ha postato nel suo blog un'interessante problema che vi invito a leggere ed a cercare di risolvere, senza andare a guardare la mia soluzione :-)

Provate a sbatterci un pò la testa: discuteremo poi insieme della soluzione.

Un aiuto:

NON affrontate il problema cercando si scrivere subito codice T-SQL. Prendete prima carte e penna e cercate di capire quali sono i passaggi logici che portano alla soluzione. Solo dopo andate ad implementarli in T-SQL.

Buon divertimento!

Published martedì 16 ottobre 2007 16.34 by dmauri
Filed under: , ,

Comments

# re: Quiz: Dati Temporali all'opera

mercoledì 17 ottobre 2007 14.36 by Fabio Zanotti

Ciao, riporto brevemente la mia soluzione:

SELECT  DISTINCT

OldValueOfA = COALESCE(VA.OldValue, -- the value linked to event date

(SELECT TOP 1 OldValue

FROM VariationA V

WHERE V.ChangeDate >= VB.ChangeDate

ORDER BY ChangeDate), -- the oldest useful value

(SELECT A FROM Products)), -- current value

OldValueOfB = COALESCE(VB.OldValue, -- the value linked to event date

(SELECT TOP 1 OldValue

FROM VariationB V

WHERE V.ChangeDate >= VA.ChangeDate

ORDER BY ChangeDate), -- the oldest useful value

(SELECT B FROM Products)),-- current value

ChangeDate = COALESCE(VA.ChangeDate,VB.ChangeDate)

FROM VariationA VA FULL OUTER JOIN VariationB VB

ON VA.ChangeDate = VB.ChangeDate

ORDER BY ChangeDate

# re: Quiz: Dati Temporali all'opera

mercoledì 17 ottobre 2007 15.56 by dmauri

Ingegnosa!

Purtroppo è anche MOLTO costosa, in quanto per ogni riga che esce da questo resultset

FROM

   VariationA VA

FULL OUTER JOIN VariationB VB

   ON VA.ChangeDate = VB.ChangeDate

è necessario fare delle query su VariationA e VariationB.

Un aiuto per far meglio: il fatto che ci sia una sola colonna che contiene la data è fuorviante. Se la colonna ChangeDate rappresenta la data in cui qual valore è stato modifica (ossia il periodo di FINE validità di quel valore) significa che possiamo recuperare anche la data di INIZIO validità. Con le due date le cose sono molto più semplici...

# Database Temporali: un esempio pratico

domenica 28 ottobre 2007 18.54 by Impedance Mismatch

Ho appena pubblicato sul nuovo sito di UGISS un articolo che mostra come tutto ciò che ha spiegato Gianluca