Duvidas select no SQL
13/07/2010
0
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
Curtir tópico
+ 0
Responder
Posts
13/07/2010
Emerson Nascimento
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)
Responder
Clique aqui para fazer login e interagir na Comunidade :)