Ho due tabelle in MS SQL Server:Qual è il modo più efficace per abbinare i valori tra 2 tabelle in base alla data precedente più recente?
dailyt
- che contiene dati giornalieri:
date val
---------------------
2014-05-22 10
2014-05-21 9.5
2014-05-20 9
2014-05-19 8
2014-05-18 7.5
etc...
E periodt
- che contiene i dati arrivano a periodi irregolari:
date val
---------------------
2014-05-21 2
2014-05-18 1
Dato una riga in dailyt
, voglio regolare il suo valore aggiungendo il valore corrispondente in periodt
con la data più vicina precedente o uguale alla data dello dailyt
riga. Così, l'output sarà simile:
addt
date val
---------------------
2014-05-22 12 <- add 2 from 2014-05-21
2014-05-21 11.5 <- add 2 from 2014-05-21
2014-05-20 10 <- add 1 from 2014-05-18
2014-05-19 9 <- add 1 from 2014-05-18
2014-05-18 8.5 <- add 1 from 2014-05-18
So che un modo per farlo è quello di unire le tabelle dailyt
e periodt
su periodt.date <= dailyt.date
e poi imponendo una condizione ROW_NUMBER() (PARTITION BY dailyt.date ORDER BY periodt.date DESC)
, e poi avere un WHERE
condizione sul numero di riga a = 1.
C'è un altro modo per farlo che sarebbe più efficiente? O è abbastanza ottimista?