Extrair apenas o registro mais recente numa consulta SQL
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
Curtidas 0
Melhor post
Emerson Nascimento
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
GOSTEI 1
Mais Respostas
Kelyson Resende
14/06/2020
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!
GOSTEI 0
Emerson Nascimento
14/06/2020
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
GOSTEI 1
Kelyson Resende
14/06/2020
Perfeito!
Muito obrigado!!!
Muito obrigado!!!
GOSTEI 0