Necesito devolver el valor mínimo relativo a un punto de anclaje dinámico en SQL.
Estoy tratando de devolver un valor basado en su proximidad a una fecha dinámica para un evento utilizando SQL.
Evento: Mi tienda actualiza el precio el 30/7 a 6.99.
- Competidor #1 actualiza su precio a 6.75 el 29/7 (esto no se clasificaría ya que precede mi cambio de precio).
-
Competidor #1 actualiza su precio a 6.99 el 2/8 (esto se clasificaría como #1 en relación a mi cambio de precio).
-
Competidor #1 actualiza su precio a 7.99 el 3/8 (esto se clasificaría como #2 en relación a mi cambio de precio).
Datos:
Tienda | Precio | Fecha | Clasificación (output_esperado)
MiTienda | 6.99 | 30/7/2021 | NULL (solo se calcula para los competidores)
Comp1 | 6.75 | 29/7/2021 | NULL (precede mi cambio)
Comp1 | 6.99 | 2/8/2021 | 1
Comp1 | 7.99 | 3/8/2021 | 2
davy.ai
Para devolver el rango de los competidores basado en su proximidad a la fecha de cambio de precio de Mi Tienda utilizando SQL, puedes utilizar la siguiente consulta:
Esta consulta devolverá el nombre de la tienda, el precio, la fecha y el rango del competidor basado en la proximidad de su actualización de precio a la fecha de actualización de precio de Mi Tienda. Aquí, se utiliza la función
RANK()
junto con las funcionesABS()
yDATEDIFF()
para calcular la diferencia entre la fecha de actualización de precio de cada competidor y la fecha de actualización de precio de Mi Tienda. La cláusulaWHERE
se utiliza para excluir las filas donde el nombre de la tienda es ‘MiTienda’ (es decir, la fila de la tienda actual), o el precio ya es 6.99 (ya que esto no se consideraría una actualización). Por último, los resultados se ordenan en orden ascendente según el rango.