miércoles, 5 de agosto de 2009

Usar campos TEXT en consultas con GROUP BY en SQL

En ocasiones no queda más remedio que agrupar consultas, ya que hay que usar funciones de grupo como MIN, MAX, AVG, etc. En este caso necesitábamos un MIN(fecha), además de cargar campos de tipo TEXT que de manera normal no podrían agruparse. Si se hace lo siguiente, la consulta fallará:


SELECT descripcion ,
ficha ,
min(fecha) minfecha

from tabla

GROUP BY
descripcion ,
ficha

ORDER BY min(fecha)



Una consulta normalmente válida de este tipo, siendo los campos 'descripcion' y 'ficha' de tipo TEXT, fallará. Para ello tenemos que engañar convirtiendo los campos de tipo texto en cadenas con longitud limitada mediante la función SUBSTRING. La solución sería la siguiente:


SELECT substring(descripcion,1,500) descripcion ,
substring(ficha,1,500) ficha ,
min(fecha) minfecha

from tabla

GROUP BY
substring(descripcion,1,500) ,
substring(ficha,1,500)

ORDER BY min(fecha)

No hay comentarios: