es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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

Tags:  , , ,

Answer

  1. Avatar for 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:

    SELECT 
        Tienda, 
        Precio, 
        Fecha, 
        RANK() OVER (ORDER BY ABS(DATEDIFF(day, '2021-07-30', Fecha))) AS Rango
    FROM 
        miTabla
    WHERE 
        Tienda <> 'MiTienda' AND Precio <> 6.99
    ORDER BY 
        Rango ASC
    

    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 funciones ABS() y DATEDIFF() 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áusula WHERE 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.

Comments are closed.