Tengo dos tablas en SQL y necesito poder hacer una combinación basada en la marca de tiempo en la tabla B anterior o igual a la marca de tiempo en la tabla A.Consulta SQL para unir dos tablas basadas en la marca de tiempo más cercana
lo tanto, aquí hay algunos datos falsos para dos mesas y la salida deseada:
Casoscerrados (Tabla 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 |
Clasificación (Tabla 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 |
resultados deseados
| 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 |
Por lo tanto, sé que el código debe ser similar a la siguiente, simplemente no puedo averiguar qué hacer con la parte ON
del JOIN
($ 1 y $ 2 son las variables que serán pasados en):
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;
sé que podría utilizar un sub-select, pero esto estará operando en al le hasta unos miles de filas, probablemente más, y necesito que sea realmente rápido; así que esperaba una cláusula simple que pudiera hacerlo.
Creo que necesita su sub-select. ¿Has probado el rendimiento y lo has encontrado inaceptable? – Beth
si la versión de SQL que está utilizando admite funciones analíticas de ventanas, debería poder hacerlo sin una selección secundaria, pero algunas versiones de SQL no las admiten. Para una sub selección única en miles de filas, el rendimiento no debería ser tan malo. (La sub-selección estará en la tabla de clasificación, ¿realmente tendrá más de unos miles de filas?) –
@Mark - En realidad, ahora que lo pienso, la tabla de clasificación debería tener menos filas que esa, ya que verificar si los datos realmente han cambiado desde la versión más reciente.Así que supongo que la selección secundaria habría funcionado bien, pero creo que agregar el tiempo de finalización es una solución mucho más limpia. –