Parece que no puedo encontrar una pregunta que aborde específicamente los requisitos de lo que estoy tratando de hacer aquí, pero me disculpo si este no es el caso.
Tengo una tabla de ejemplo:
type|start_date|end_date |cost|
bananas|2019-01-01|2019-01-31|100
bananas|2019-02-01|2019-02-28|95
juice |null |null |55
Y así. El punto de la tabla es que la 'comida' o cualquier otra cosa, puede tener un precio diferente en función de un rango de tiempo diferente, sin embargo, hay algunos elementos, como el jugo, que no se ven afectados cuando cambia la fecha (es decir, se mantienen constantes ).
En otra tabla, quiero buscar un valor basado en el rango de fechas en la tabla anterior.
Por ejemplo:
customerId|transaction_date|item |quantity|
abc123 |2019-01-25 |bananas|4
abc126 |2019-02-06 |bananas|4
abc128 |2019-02-09 |juice |1
Entonces, los dos primeros clientes compraron bananas, pero una en enero y otra en febrero. Luego, otro cliente compró jugo. ¿Cómo puedo devolver el costo correspondiente correcto basado en mi otra tabla?
He tratado de hacer donde la fecha son BETWEEN
las dos, pero esto aliena cualquier otra fecha que no existe en la tabla de precios. También he intentado utilizar CASE
para abordar esto, pero fue en vano.
¿Cuál sería el mejor enfoque para esto?
Esperaría que el resultado arrojara una tabla unida con lo siguiente:
customerId|transaction_date|item |quantity|cost|
abc123 |2019-01-25 |bananas|4 |100
abc126 |2019-02-06 |bananas|4 |95
abc128 |2019-02-09 |juice |1 |55
¿Dónde cost
se une la columna a los criterios anteriores?
Puede usar ISNULL en la combinación izquierda.
SELECT P.*, C.cost
FROM Purchases P
LEFT JOIN Product_Costs C ON P.item = C.type
AND P.transaction_date >= ISNULL(C.start_date, P.transaction_date)
AND P.transaction_date <= ISNULL(C.end_date, P.transaction_date);
Violín de Nick modificado: http://sqlfiddle.com/#!18/e366b/6
Este artículo se recopila de Internet, indique la fuente cuando se vuelva a imprimir.
En caso de infracción, por favor [email protected] Eliminar
Déjame decir algunas palabras