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.
davy.ai
Para consultar todos los registros y ordenarlos por
discount_amount
, pero solo sidiscount_expires_at
es mayor que el tiempo actual, puedes utilizar la siguiente consulta SQL:Esta consulta utiliza la función
NOW()
para comparar el campodiscount_expires_at
con el tiempo actual. Si es mayor, entonces se ordenará pordiscount_amount
. Sin embargo, si ya ha expirado, se ordenará por el campoid
en orden descendente utilizando la instrucciónCASE
. Se incluyen todas las filas, pero aquellas que siguen siendo válidas se ordenan antes que aquellas que han expirado.