MySQL - Busquedas por aproximación MySQL

 
Vista:
Imágen de perfil de Giannino

Busquedas por aproximación MySQL

Publicado por Giannino (2 intervenciones) el 11/07/2022 20:07:51
Hola

A ver si me pueden ayudar?

Necesito hace una busqueda en MySQL que devuelva el registro anterior mas próximo anterior en caso de no encontrar la coincidencia exacta

Ej: dadas las fechas 11/12/2021, 12/12/2021, 15/12/2021 - Al buscar el 14/12/2021 debería devolver 12/12/2021

De igual forma deberá hacer con busquedas de montos o numero:

Ej: dado los numeros 17,18,19,21,22,24 - Al buscar el numero 20 debería devolver 19

Existe alguna función en MySQL 8 que haga o ayude con esto ?

Gracias por la ayuda
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
1
Responder
Imágen de perfil de Ivan

Busquedas por aproximación MySQL

Publicado por Ivan (37 intervenciones) el 12/07/2022 13:39:48
Hola,

muy interesante tu pregunta!

Se me ocurre una consulta de este tipo para las fechas:

miFecha = la fecha que quiero buscar
Fechas = fechas en la DB

1
SELECT *, DATEDIFF(miFecha, Fechas) AS dif FROM una_tabla WHERE DATEDIFF(miFecha, Fechas) > 0 ORDER BY dif ASC LIMIT 1

Para los números lo mismo pero simplemente restándolos.
NOTA: Si los números son UNSIGNED no se pueden restar directamente, debes trasformarlos a signed en la consulta:

cast(campo_DB as signed)

Un saludo!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de Giannino

Busquedas por aproximación MySQL

Publicado por Giannino (2 intervenciones) el 12/07/2022 14:59:45
Excelente Ivan
Muchas gracias, funcionó a la perfección!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Busquedas por aproximación MySQL

Publicado por Costero (3 intervenciones) el 12/07/2022 15:09:48
Algo asi funcionaria?

1
2
3
4
select * from tu_tabla
where fechas is not null and fechas <= tu_fecha
order by fechas desc
limit 1;

Si es el caso, seria la query mas rapida?


Gracias
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de Ivan

Busquedas por aproximación MySQL

Publicado por Ivan (37 intervenciones) el 12/07/2022 18:48:51
Hola,

también es muy interesante esta pregunta jeje

Tu consulta funciona perfectamente y seguramente se ejecuta un pelín más rápido al hacer una comparación en vez de una resta de fechas.

El kit de la cuestión es a la hora de ordenar, tu consulta debe ordenar todos los resultados por fechas (más costoso), en la mía se ordena por un número (menos costoso).

A mayor cantidad de registros mi consulta será un poco más rápida y a menor cantidad de registros lo será la tuya. Si sólo buscamos números sí es mejor una comparación porque ya se ordenaría por números.

Es un mundo apasionante esto de las optimizaciones y depende mucho de como sean las tablas, índices, cantidad de datos, etc

Un saludo!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Busquedas por aproximación MySQL

Publicado por Costero (3 intervenciones) el 12/07/2022 19:55:07
Cool. Gracias
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar