Extrair apenas o registro mais recente numa consulta SQL
14/06/2020
0
Gostaria de acertar a minha consulta SQL (abaixo) para extrair, somente, o último (maior, mais recente) registro do DateTime (data e hora) de cada TagName.
SET NOCOUNT ON
DECLARE @StartDate DateTime
DECLARE @EndDate DateTime
SET @StartDate = DateAdd(dd,-60,GetDate())
SET @EndDate = GetDate()
SET NOCOUNT OFF
SELECT temp.TagName ,Description ,DateTime ,Value ,StartDateTime From (
SELECT *
FROM History
WHERE History.TagName LIKE ('%NIVEL_ALTO')
AND Value = 1
AND wwRetrievalMode = 'Delta'
AND wwVersion = 'Latest'
AND DateTime >= @StartDate
AND DateTime <= @EndDate) temp
LEFT JOIN Tag ON Tag.TagName =temp.TagName
WHERE temp.StartDateTime >= @StartDate
SET NOCOUNT ON
DECLARE @StartDate DateTime
DECLARE @EndDate DateTime
SET @StartDate = DateAdd(dd,-60,GetDate())
SET @EndDate = GetDate()
SET NOCOUNT OFF
SELECT temp.TagName ,Description ,DateTime ,Value ,StartDateTime From (
SELECT *
FROM History
WHERE History.TagName LIKE ('%NIVEL_ALTO')
AND Value = 1
AND wwRetrievalMode = 'Delta'
AND wwVersion = 'Latest'
AND DateTime >= @StartDate
AND DateTime <= @EndDate) temp
LEFT JOIN Tag ON Tag.TagName =temp.TagName
WHERE temp.StartDateTime >= @StartDate
Kelyson Resende
Curtir tópico
+ 0
Responder
Post mais votado
14/06/2020
tente algo assim:
SELECT * FROM History H INNER JOIN (SELECT TagName, max(DateTime) MaxData FROM History WHERE TagName LIKE ('%NIVEL_ALTO') AND Value = 1 AND wwRetrievalMode = 'Delta' AND wwVersion = 'Latest' AND DateTime >= @StartDate AND DateTime <= @EndDate GROUP BY TagName) M ON M.TagName = H.TagName and M.MaxData = H.DateTime
Emerson Nascimento
Responder
Mais Posts
15/06/2020
Kelyson Resende
Perfeito, meu amigo!
Muito obrigado!!!
Desejo acertar mais uns detalhe na consulta:
1. Inserir mais dois termos no LIKE, ou seja, seriam NIVEL_ALTO, NIVEL_MUITO_ALTO e NIVEL_MUITO_MUITO_ALTO.
2. Apresentar o resultado com apenas duas colunas. Sendo elas: TagName e DateTime (nessa sequência).
3. Fazer esta consulta a partir de uma planilha do Excel com macro habilitada (através de um botão mesmo).
Mais uma vez, agradeço!
Muito obrigado!!!
Desejo acertar mais uns detalhe na consulta:
1. Inserir mais dois termos no LIKE, ou seja, seriam NIVEL_ALTO, NIVEL_MUITO_ALTO e NIVEL_MUITO_MUITO_ALTO.
2. Apresentar o resultado com apenas duas colunas. Sendo elas: TagName e DateTime (nessa sequência).
3. Fazer esta consulta a partir de uma planilha do Excel com macro habilitada (através de um botão mesmo).
Mais uma vez, agradeço!
Responder
15/06/2020
Emerson Nascimento
se você precisa somente dos campos TagName e DateTime, não é necessário relacionamento algum.
Basta fazer:
a cláusula like serve para buscar parte de um conteúdo. se o conteúdo do campo for exatamente um dos valores que você postou, pode trocar o like por in:
Basta fazer:
SELECT TagName, max(DateTime) MaxData FROM History WHERE TagName (LIKE '%NIVEL_ALTO%' OR LIKE '%NIVEL_MUITO_ALTO%' OR LIKE '%NIVEL_MUITO_MUITO_ALTO%') AND Value = 1 AND wwRetrievalMode = 'Delta' AND wwVersion = 'Latest' AND DateTime >= @StartDate AND DateTime <= @EndDate GROUP BY TagName
a cláusula like serve para buscar parte de um conteúdo. se o conteúdo do campo for exatamente um dos valores que você postou, pode trocar o like por in:
SELECT TagName, max(DateTime) MaxData FROM History WHERE TagName IN ('NIVEL_ALTO', 'NIVEL_MUITO_ALTO', 'NIVEL_MUITO_MUITO_ALTO') AND Value = 1 AND wwRetrievalMode = 'Delta' AND wwVersion = 'Latest' AND DateTime >= @StartDate AND DateTime <= @EndDate GROUP BY TagName
Responder
Clique aqui para fazer login e interagir na Comunidade :)