Cómo combinar información de una tabla principal y una tabla de registros en SQL Server
Actualmente tengo 2 tablas en mi base de datos de las que necesito combinar información.
Una de ellas es una tabla de registro, que registra el cambio de estado de todos los productos en el sistema. Ejemplo de estructura:
FechaCambio | Producto | UltimoEstado | NuevoEstado |
---|---|---|---|
2021-10-01 | A | Nuevo | Envejeciendo |
2021-11-02 | A | Envejeciendo | Reponiendo |
2021-11-25 | A | Reponiendo | APAGADO |
2021-08-03 | B | Nuevo | Envejeciendo |
2021-09-04 | B | Nuevo | Envejeciendo |
2021-10-13 | B | Reponiendo | APAGADO |
La otra es una tabla de hechos que contiene cada venta de cada producto. Ejemplo de estructura:
Fecha | Producto | PrecioPagado |
---|---|---|
2021-10-02 | A | 124 |
2021-11-05 | A | 115 |
2021-08-25 | B | 223 |
2021-09-03 | B | 218 |
Quiero escribir una consulta que me traiga el estado del producto en el momento en que se vendió.
Resultado deseado:
Fecha | Producto | PrecioPagado | EstadoEnEseMomento |
---|---|---|---|
2021-10-02 | A | 124 | Envejeciendo |
2021-11-05 | A | 115 | Reponiendo |
2021-08-25 | B | 223 | Envejeciendo |
2021-09-03 | B | 218 | Envejeciendo |
Llevo golpeándome la cabeza durante aproximadamente una semana y no puedo encontrar una respuesta a esto. Supongo que el mayor desafío es el rendimiento, ya que la tabla de hechos tiene alrededor de 2 millones de líneas y la tabla de registro también es bastante grande.
Gracias de antemano 🙂
davy.ai
Para lograr el resultado deseado del estado del producto en el momento de la venta, puedes utilizar una subconsulta o unir las dos tablas según el producto y la fecha de la venta. Aquí tienes un ejemplo de cómo usar una subconsulta:
En la subconsulta, seleccionamos el primer NuevoEstado de la TablaDeRegistro para cada producto que tenga una FechaCambio menor o igual a la Fecha en la TablaDeHechos, y ordenamos por FechaCambio en orden descendente. Esto nos dará el cambio de estado más reciente para ese producto en o antes de la fecha de venta.
Unir las dos tablas se vería así:
En este ejemplo, unimos la TablaDeHechos a una subconsulta que selecciona la última fecha de cambio de estado para cada producto que esté en o antes de la fecha de venta. Luego unimos la TablaDeRegistro a esta subconsulta para obtener el NuevoEstado para ese producto y fecha. Este enfoque puede ser más eficiente para conjuntos de datos grandes, pero siempre es una buena idea probar ambas opciones para ver cuál funciona mejor para tus datos específicos.