Ho due tabelle in SQL e devo essere in grado di fare un join basato sul timestamp nella tabella B che è precedente o uguale al timestamp nella tabella A.Query SQL per unire due tabelle in base al timestamp più ravvicinato
Quindi, ecco alcuni dati falsi per due tavoli e l'output desiderato:
Casichiusi (Tabella A)
| id | resolution | timestamp | ------------------------------------------------ | 1 | solved | 2006-10-05 11:55:44.888153 | | 2 | closed | 2007-10-07 12:34:17.033498 | | 3 | trashed | 2008-10-09 08:19:36.983747 | | 4 | solved | 2010-10-13 04:28:14.348753 |
Classificazione (tabella B)
| id | value | timestamp | ------------------------------------------------- | 1 | freshman | 2006-01-01 12:02:44.888153 | | 2 | sophomore | 2007-01-01 12:01:19.984333 | | 3 | junior | 2008-01-01 12:02:28.746149 |
risultati desiderati
| id | resolution | timestamp | value | -------------------------------------------------------------- | 1 | solved | 2006-10-05 11:55:44.888153 | freshman | | 2 | closed | 2007-10-07 12:34:17.033498 | sophomore | | 3 | trashed | 2008-10-09 08:19:36.983747 | junior | | 4 | solved | 2010-10-13 04:28:14.348753 | junior |
Quindi, so che il codice deve essere simile al seguente, non riesco proprio a capire cosa fare con il ON
porzione del JOIN
($ 1 e $ 2 sono le variabili che saranno passate a):
SELECT case.id, case.resolution, case.timestamp, class.value
FROM closed_cases AS case
LEFT JOIN classifications AS class ON ???
WHERE case.timestamp BETWEEN $1 AND $2;
so che potrei usare un sub-select, ma questo sarà operativo su a Le poche migliaia di file, probabilmente di più, e ho bisogno che sia molto veloce; quindi speravo in una semplice clausola che potesse farlo.
Penso che è necessario il sub-select. Hai testato la performance e l'hai trovato inaccettabile? – Beth
se la versione di SQL che stai utilizzando supporta funzioni di analisi delle finestre, dovresti essere in grado di farlo senza una sottoselezione, ma alcune versioni di SQL non le supportano. Per una singola sotto-selezione su poche migliaia di righe, le prestazioni non dovrebbero essere troppo brutte. (La sotto-selezione sarà sulla tabella di classificazione - questo avrà davvero più di qualche migliaio di righe?) –
@Mark - In realtà, a pensarci bene, la tabella di classificazione dovrebbe avere un numero di file inferiore a quello di I'll controlla se i dati sono effettivamente cambiati rispetto alla versione più recente.Quindi suppongo che la sotto-selezione avrebbe funzionato bene, ma penso che aggiungere l'ora di fine sia una soluzione molto più pulita. –