Tengo un problema con una consulta en Firebird 2.5 que no sé solucionar ni por qué ocurre. A ver si alguien puede ver más allá.
El caso es que tengo 2 tablas, una que acumula datos de unos sensores de humedad y temperatura (tabla HUM_TEM) y otra donde guardo los sensores (tabla SENSORES). En la tabla HUM_TEM se almacenan los datos de cada sensor y la fecha en que se recogió, entre otros. Estos son los campos:
IDDATO - id del dato
IDSENSOR - conecta con la tabla sensores, formato 1,2, etc
FECHA - fecha en formato 01/03/2001
HORA - hora en formato 12:05
DIA_INT - fecha en formato 20010301 (para el día 01/03/2001)
DATO - dato del sensor en formato 56,25
CORRECTO - si/no
AAA - año en formato 2001
MMM - mes en formato 1,..12
DDD - día del año en formato 1...366
SEM - semana del año en formato 1..52
HHH - hora en formato 0...23
MNT - minuto en formato 0..59
DSM - dia de la semana en formato 1 ..7
Campos de la tabla SENSORES:
IDSENSOR -id del sensor
REF - nombre corto del sensor, 'HUM001'
UBICACION - campo texto
NOMBRE - campo texto, nombre largo "Sensor de humedad 1"
COMENTARIO - campo texto
ACTIVO - si/no
BUENAFUNCION -si/no
Bien. Ahora lanzo la siguiente consulta:
SELECT
HUM_TEM.HHH, avg(hum_tem.dato) as MEDIA, sensores.ref as Sensor
FROM hum_tem, sensores
WHERE sensores.idproyecto = 1
AND HUM_TEM.dia_int BETWEEN 20100101 AND 20100331
AND HUM_TEM.DSM = 1
AND SENSORES.REF IN ('HUM001','HUM002','HUM003', 'TEM001', 'TEM002','TEM003')
AND sensores.idsensor = hum_tem.idsensor
AND HUM_TEM.DATO IS NOT NULL
group by HHH, ref
order by HHH, ref
Con esta consulta lo que quiero es obtener los promedio por hora, entre las fechas 01/01/2010 y 31/03/2010, de los sensores indicados en 'HUM001','HUM002','HUM003', 'TEM001', 'TEM002','TEM003' PERO sólo los que el día de la semana es igual a domingo ('AND HUM_TEM.DSM = 1 ')
La consulta se realiza bien, sin problemas, pero hace caso omiso de la instrucción:
AND HUM_TEM.DSM = 1
Y me devuelve los mismos datos que si omito esta línea.
Si incluyo el campo DSM en los campos obtenidos, sí que me hace caso de la instrucción filtro por domingo, pero tengo entonces que incluir el campo DSM en el GROUP BY y obtengo un resultado no deseado.
Probando, he comprobado que sí me acepta otros filtros, como por ejemplo si pongo
AND HUM_TEM.Hora BETWEEN '12:00:00' AND '23:59:00'
sí que me realiza bien el filtro.
¿Por qué entonces no me acepta filtrar por el campo DSM?
El campo DSM tiene un índice, al igual que el campo HORA.
Uso Delphi 7, FB 2.5 y Windows Vista 64 bits. ¿Alguna ayuda?
Un saludo.