Extrair apenas o registro mais recente numa consulta SQL

14/06/2020

0

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
Kelyson Resende

Kelyson Resende

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

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!
Responder

15/06/2020

Emerson Nascimento

se você precisa somente dos campos TagName e DateTime, não é necessário relacionamento algum.
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

16/06/2020

Kelyson Resende

Perfeito!
Muito obrigado!!!
Responder

Assista grátis a nossa aula inaugural

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar