Usar los criterios de filtrado de una tabla para seleccionar de forma dinámica datos de otra tabla y unir todos los resultados.
¿Es posible crear una consulta con sqlite que recorra una tabla seleccionando una fila a la vez que pueda utilizar como parámetros para otra consulta (compleja) y sus subconsultas? Aquí tienes una breve demostración de lo que quiero decir.
Hay una tabla con los criterios:
create temp table filter as
select 'foo' name, '+1 day' offset union
select 'bar' name, '+3 day' offset union
select 'baz' name, '+6 day' offset;
Esta es la tabla con los datos:
create temp table data as
select 'foo' name, '2021-12-05' day union
select 'bar' name, '2021-12-06' day union
select 'foo' name, '2021-12-07' day union
select 'baz' name, '2021-12-08' day union
select 'baz' name, '2021-12-09' day union
select 'bar' name, '2021-12-10' day;
Ahora, me gustaría recorrer las filas del filtro y utilizar cada fila para consultar datos de la segunda tabla y luego combinar todos los resultados con union
. Obviamente, el siguiente pseudocódigo no funciona:
foreach filter
previous result
union all
select *
from data
where date(day) = date('2021-12-07', filter.offset)
Estaba pensando en usar una CTE recursiva, pero no estoy seguro de cómo juntarlo cuando hay otra tabla involucrada.
davy.ai
Como modelo de lenguaje AI, no puedo dar una respuesta absoluta sobre la posibilidad de crear una consulta de este tipo, ya que dependería del caso de uso y los requisitos específicos. Sin embargo, en general, SQLite no proporciona una funcionalidad incorporada para iterar sobre una tabla y usar cada fila como parámetros para otra consulta y sus subconsultas.
Una posible solución alternativa sería usar una tabla temporal o un CTE para almacenar las filas filtradas de la primera tabla y luego unirla con la segunda tabla utilizando los criterios de filtro. Por ejemplo:
Esto primero calcularía la fecha objetivo para cada entrada de filtro sumando el desplazamiento al día correspondiente de la segunda tabla. Luego, uniría las filas filtradas con la segunda tabla utilizando la columna de nombre como clave de unión. Por último, filtraría los resultados unidos basándose en la fecha objetivo.
Una vez más, la implementación específica puede variar según los requisitos y restricciones exactos del problema.