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.

Condiciones if then else en la cláusula order by.

Tengo una tabla con los siguientes campos:

  • id
  • discount_amount
  • discount_expires_at

¿Cómo puedo consultar todos los registros y ordenarlos por discount_amount, pero solo si discount_expires_at es mayor que la hora actual?

Todas las filas deben ser incluidas de cualquier manera, pero deben aparecer primero solo si el descuento no ha expirado hasta ahora. Si ha expirado, entonces deben ser ordenadas por id, de forma descendente.

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Para consultar todos los registros y ordenarlos por discount_amount, pero solo si discount_expires_at es mayor que el tiempo actual, puedes utilizar la siguiente consulta SQL:

    SELECT *
    FROM table_name
    WHERE discount_expires_at > NOW()
    ORDER BY CASE WHEN discount_expires_at > NOW() THEN discount_amount ELSE -id END DESC
    

    Esta consulta utiliza la función NOW() para comparar el campo discount_expires_at con el tiempo actual. Si es mayor, entonces se ordenará por discount_amount. Sin embargo, si ya ha expirado, se ordenará por el campo id en orden descendente utilizando la instrucción CASE. Se incluyen todas las filas, pero aquellas que siguen siendo válidas se ordenan antes que aquellas que han expirado.

Comments are closed.