Ho una tabella MS SQL che contiene i dati di magazzino con le seguenti colonne: Id, Symbol, Date, Open, High, Low, Close
.Come partecipare alla tabella di join in modo che ogni record sia unito al record "precedente"?
Vorrei partecipare autonomamente al tavolo, così posso ottenere una variazione giornaliera di Close
.
Devo creare una query che si unirà alla tabella con se stessa in modo che ogni record contenga anche i dati della sessione precedente (attenzione, non posso usare la data di ieri).
La mia idea è quella di fare qualcosa di simile:
select * from quotes t1
inner join quotes t2
on t1.symbol = t2.symbol and
t2.date = (select max(date) from quotes where symbol = t1.symbol and date < t1.date)
Tuttavia non so se questo è il modo corretto/più veloce. Che cosa dovrei prendere in considerazione quando si pensa alle prestazioni? (Ad esempio, l'inserimento dell'indice UNIQUE su una coppia (Symbol, Date) migliora le prestazioni?)
In questa tabella ci saranno circa 100.000 nuovi record all'anno. Sto usando MS SQL Server 2008
si può mostrare alcuni dati di esempio e gettarlo in un violino? – Kermit
(1) Utilizzare un join di sinistra invece di un join interno, per gestire i nuovi prodotti. Quindi hai una query generale, che può sempre essere filtrata per escludere i record con un NULL Right-Hand-Side. –
@PieterGeerkens: Mi interessano solo le righe che non hanno valori NULL, quindi INNER JOIN è lì apposta. LEFT JOIN migliorerà le prestazioni? Io non la penso così ... –