Duvidas select no SQL
Boa Tarde Pessoal,
Estou com uma duvida em um select no sqlserver 2005,
so para explicar o que necessito, tenho uma tabela com varios registros ja existentes nelas, e a consulta se executa por um intervalo de datas, tipo assim dta_hora_inicial, data_hora_Final, so que o que necessito, é visualizar so o ultimo registro valido neste periodo, se alguem conseguir me da uma luz, ficaria grato, abaixo bem o que necessito fazer:
select TAG, MAX(CAST(VALOR AS FLOAT)) AS ULTIMO_VALOR_VALIDO,
MAX(VALOR) AS MAXIMO, MIN(VALOR) AS MINIMO,
CASE WHEN TAG = '410_AU_TOTAL_SQT' THEN
MAX(CAST(VALOR AS NUMERIC(15,2))) - MIN(CAST(VALOR AS NUMERIC(15,2)))
ELSE
'0.00'
end as CALCULO_TAG_TOTAL from RELATORIO
WHERE
DATA_HORA BETWEEN CONVERT(DATETIME, '09/07/2010 18:05:00',103) AND
CONVERT(DATETIME, '09/07/2010 18:05:59',103) GROUP BY TAG ORDER BY TAG
Is Informação
Curtidas 0
Respostas
Emerson Nascimento
13/07/2010
como você não especificou como definir o último registro válido, tente:
select top 1
TAG,
MAX(CAST(VALOR AS FLOAT)) AS ULTIMO_VALOR_VALIDO,
MAX(VALOR) AS MAXIMO,
MIN(VALOR) AS MINIMO,
CASE WHEN TAG = '410_AU_TOTAL_SQT'
THEN CAST(MAX(VALOR) - MIN(VALOR) AS NUMERIC(15,2))
ELSE 0.00
END as CALCULO_TAG_TOTAL
from
RELATORIO
where
DATA_HORA BETWEEN CONVERT(DATETIME, '09/07/2010 18:05:00',103)
AND CONVERT(DATETIME, '09/07/2010 18:05:59',103)
group by
TAG
order by
TAG desc
ou, se o último registro puder ser definido pela maior data/hora:
select
TAG,
MAX(CAST(VALOR AS FLOAT)) AS ULTIMO_VALOR_VALIDO,
MAX(VALOR) AS MAXIMO,
MIN(VALOR) AS MINIMO,
CASE WHEN TAG = '410_AU_TOTAL_SQT'
THEN CAST(MAX(VALOR) - MIN(VALOR) AS NUMERIC(15,2))
ELSE 0.00
END as CALCULO_TAG_TOTAL
from
RELATORIO
where
DATA_HORA = (select max(DATA_HORA)
from RELATORIO
where DATA_HORA BETWEEN CONVERT(DATETIME, '09/07/2010 18:05:00',103)
AND CONVERT(DATETIME, '09/07/2010 18:05:59',103))
group by
TAG
order by
TAG desc
você pode querer também o último registro de cada TAG:
select
rel.TAG,
MAX(CAST(rel.VALOR AS FLOAT)) AS ULTIMO_VALOR_VALIDO,
MAX(rel.VALOR) AS MAXIMO,
MIN(rel.VALOR) AS MINIMO,
CASE WHEN rel.TAG = '410_AU_TOTAL_SQT'
THEN CAST(MAX(rel.VALOR) - MIN(rel.VALOR) AS NUMERIC(15,2))
ELSE 0.00
END as CALCULO_TAG_TOTAL
from
RELATORIO rel
where
rel.DATA_HORA = (select max(rel2.DATA_HORA)
from RELATORIO rel2
where rel2.DATA_HORA BETWEEN CONVERT(DATETIME, '09/07/2010 18:05:00',103)
AND CONVERT(DATETIME, '09/07/2010 18:05:59',103)
AND rel2.TAG = rel.TAG)
group by
rel.TAG
order by
rel.TAG desc
talvez dê algum erro de sintaxe, pois não tenho seu banco de dados pra testar (nem SQL disponível no momento)
select top 1
TAG,
MAX(CAST(VALOR AS FLOAT)) AS ULTIMO_VALOR_VALIDO,
MAX(VALOR) AS MAXIMO,
MIN(VALOR) AS MINIMO,
CASE WHEN TAG = '410_AU_TOTAL_SQT'
THEN CAST(MAX(VALOR) - MIN(VALOR) AS NUMERIC(15,2))
ELSE 0.00
END as CALCULO_TAG_TOTAL
from
RELATORIO
where
DATA_HORA BETWEEN CONVERT(DATETIME, '09/07/2010 18:05:00',103)
AND CONVERT(DATETIME, '09/07/2010 18:05:59',103)
group by
TAG
order by
TAG desc
ou, se o último registro puder ser definido pela maior data/hora:
select
TAG,
MAX(CAST(VALOR AS FLOAT)) AS ULTIMO_VALOR_VALIDO,
MAX(VALOR) AS MAXIMO,
MIN(VALOR) AS MINIMO,
CASE WHEN TAG = '410_AU_TOTAL_SQT'
THEN CAST(MAX(VALOR) - MIN(VALOR) AS NUMERIC(15,2))
ELSE 0.00
END as CALCULO_TAG_TOTAL
from
RELATORIO
where
DATA_HORA = (select max(DATA_HORA)
from RELATORIO
where DATA_HORA BETWEEN CONVERT(DATETIME, '09/07/2010 18:05:00',103)
AND CONVERT(DATETIME, '09/07/2010 18:05:59',103))
group by
TAG
order by
TAG desc
você pode querer também o último registro de cada TAG:
select
rel.TAG,
MAX(CAST(rel.VALOR AS FLOAT)) AS ULTIMO_VALOR_VALIDO,
MAX(rel.VALOR) AS MAXIMO,
MIN(rel.VALOR) AS MINIMO,
CASE WHEN rel.TAG = '410_AU_TOTAL_SQT'
THEN CAST(MAX(rel.VALOR) - MIN(rel.VALOR) AS NUMERIC(15,2))
ELSE 0.00
END as CALCULO_TAG_TOTAL
from
RELATORIO rel
where
rel.DATA_HORA = (select max(rel2.DATA_HORA)
from RELATORIO rel2
where rel2.DATA_HORA BETWEEN CONVERT(DATETIME, '09/07/2010 18:05:00',103)
AND CONVERT(DATETIME, '09/07/2010 18:05:59',103)
AND rel2.TAG = rel.TAG)
group by
rel.TAG
order by
rel.TAG desc
talvez dê algum erro de sintaxe, pois não tenho seu banco de dados pra testar (nem SQL disponível no momento)
GOSTEI 0