Ver Mensaje Individual
  #5 (permalink)  
Antiguo 20/07/2011, 08:32
leonardo_josue
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 4 meses
Puntos: 447
Respuesta: buscar el resultado que mas se ajuste de cada id

Hola ros0809

Podrías hacerlo más o menos así:

Código SQL:
Ver original
  1. DECLARE @Tbl_datos TABLE (id VARCHAR(2), nombre VARCHAR(15), dias INT, precio INT)
  2. INSERT INTO @Tbl_datos VALUES ('01', 'madrid', 3, 20)
  3. INSERT INTO @Tbl_datos VALUES ('01', 'madrid', 5, 25)
  4. INSERT INTO @Tbl_datos VALUES ('01', 'madrid', 7, 30)
  5. INSERT INTO @Tbl_datos VALUES ('01', 'madrid', 10, 35)
  6. INSERT INTO @Tbl_datos VALUES ('02', 'barcelona', 3, 15)
  7. INSERT INTO @Tbl_datos VALUES ('02', 'barcelona', 7, 19)
  8. INSERT INTO @Tbl_datos VALUES ('02', 'barcelona', 12, 25)
  9. INSERT INTO @Tbl_datos VALUES ('03', 'bilbao', 1, 7)
  10. INSERT INTO @Tbl_datos VALUES ('03', 'bilbao', 4, 9)
  11. INSERT INTO @Tbl_datos VALUES ('03', 'bilbao', 9, 10)
  12. INSERT INTO @Tbl_datos VALUES ('04', 'sevilla', 4, 10)
  13. INSERT INTO @Tbl_datos VALUES ('04', 'sevilla', 11, 20)
  14.  
  15. DECLARE @dias_buscados INT
  16. SET @dias_buscados = 5
  17. SELECT T1.* FROM @Tbl_datos T1 INNER JOIN
  18. (SELECT id, MIN(dias - @dias_buscados) diferencia FROM @Tbl_datos WHERE dias >= @dias_buscados GROUP BY id) T2
  19. ON T1.id = T2.id AND T1.dias = T2.diferencia + @dias_buscados

la idea de la cadena es obtener la menor diferencia para cada ciudad con respecto a los días buscados, de tal manera que si ejecutas sólo la subconsulta obtendrías una tabla como esta:

Código:
id   diferencia
---- -----------
01   0
02   2
03   4
04   6
una diferencia = 0 quiere decir que para es id existe un registro igual al número de dias buscado, por lo tanto en la tabla debe existir un registro con dias = a diferencia + días buscados...

Dale un vistazo para ver si te sirve y si encuentro alguna forma más fácil de llegar al resultado lo posteo por la tarde.

Saludos
Leo.