Nel corso del tempo, mi sono abituato alla funzionalità incredibilmente utile dei join rotanti di data.table
in r
. Questi utilizzano l'operazione di LOCF
(ultima osservazione riportata in avanti). Sfortunatamente, sono costretto a lavorare in un ambiente con cui ho meno familiarità (usando postgres
). Esiste un'operazione analoga in SQL (in particolare postgres
)?Rolling joins (LOCF) in Postgres
Ecco un esempio di quello che ho e l'uscita vorrei:
Qui è la mia prima tavola
dt1 = data.table(Date=seq(from=as.Date("2013-01-03"),
to=as.Date("2013-06-27"), by="1 day"),key="Date")[, ind:=.I]
Date ind
1: 2013-01-03 1
2: 2013-01-04 2
3: 2013-01-05 3
4: 2013-01-06 4
5: 2013-01-07 5
---
172: 2013-06-23 172
173: 2013-06-24 173
174: 2013-06-25 174
175: 2013-06-26 175
176: 2013-06-27 176
Qui è la mia seconda tabella
dt2 = data.table(Date=seq(from=as.Date("2013-01-01"),
to=as.Date("2013-06-30"), by="1 week"),key="Date")
Date
1: 2013-01-01
2: 2013-01-08
3: 2013-01-15
4: 2013-01-22
5: 2013-01-29
---
22: 2013-05-28
23: 2013-06-04
24: 2013-06-11
25: 2013-06-18
26: 2013-06-25
Ecco la codice che userei in data.table
per l'output desiderato.
dt1[dt2, roll=Inf]
Date ind
1: 2013-01-01 NA
2: 2013-01-08 6
3: 2013-01-15 13
4: 2013-01-22 20
5: 2013-01-29 27
---
22: 2013-05-28 146
23: 2013-06-04 153
24: 2013-06-11 160
25: 2013-06-18 167
26: 2013-06-25 174
Questo è anche possibile utilizzare postgres
(o più in generale, SQL
? Grazie mille per tutto l'aiuto che potete fornire.
Cosa significano i valori nella colonna "ind " significare? –
È semplicemente un valore per confermare che il join è stato eseguito correttamente. In questo caso, è fondamentalmente il numero di riga. –
Se conferma che il join è stato eseguito correttamente, non è possibile utilizzare solo la seconda tabella?I valori nella colonna "Data" sono identici. –