COMO MONTO ESTA QUERY AGUPANDO CADA 2 DATAS

JCM0867 21/03/2023 11:06:47
#501180
Olá pessoal tenho a seguinte tabela no SQL Server

Data Valor
2023-03-15 5
[txt-color=#e80000]2023-03-17 7[/txt-color]
[txt-color=#e80000]2023-03-18 9[/txt-color]
2023-03-21 5
[txt-color=#e80000]2023-03-25 7[/txt-color]

Como monto uma query para pegar o Maior valor cada duas datas.
No caso seria maior entre dia 15 e 17, maior entre 18 e 21 e como o dia 25 não tem um par, pega ele mesmo
Resulraria em:

Data Valor
2023-03-17 7
2023-03-18 9
2023-03-25 7

A tabela estaria ordenado por Data e as datas não se repetem.

Grato se alguém souber como posso fazer
NILSONTRES 21/03/2023 11:26:00
#501181
Select max(valor) where data>="datamenor" and data <="datamaior"
JCM0867 21/03/2023 11:33:28
#501182
Opa,
Maior cada Duas datas
JCM0867 21/03/2023 11:59:45
#501183
Talvez facilitaria se se colocassemos em uma primeira tablela um agrupamento ai pegaria o maior em cada grupo,
Como poderia fazer um Gupo cada duas linhas?

Grupo Data Valor
1 2023-03-15 5
1 2023-03-17 7
2 2023-03-18 9
2 2023-03-21 5
3 2023-03-25 7

KERPLUNK 21/03/2023 12:20:24
#501186
Qual o critério para as duas datas que quer pegar o maior?
JCM0867 21/03/2023 13:11:10
#501190
Pegar duas linhas não tem criterio, sempre serão duas linhas fixas.
Na tabela principal não tem mais nada que identifique cada duas linhas.
A unica coisa que tenho uma sequencia crescente de datas e valores
JCM0867 21/03/2023 13:32:11
#501191
Será que só um loop e colocar um contador + 1 cada dois registros em uma tabela e depois numa tabela 2 vejo o maior por grupo
DS2T 21/03/2023 13:50:29
#501192
Resposta escolhida
Achei interessante e acabei pegando um pouco do horário de almoço pra fazer.
Segue um exemplo:

DECLARE @ExemploTabela AS TABLE
(
[data] date PRIMARY KEY,
valor int
)

INSERT INTO @ExemploTabela ([data], valor) VALUES
("2023-03-15", 5), ("2023-03-17", 7), ("2023-03-18", 9),
("2023-03-21", 5), ("2023-03-25", 7)


;WITH tPosicional(posicao, [data], valor) AS
(
SELECT
*
FROM
(
SELECT
ROW_NUMBER() OVER (order by t2.[data] ASC) as posicao,
t2.*
FROM
@ExemploTabela t2
) t1

)
SELECT
CASE WHEN t2.valor > t1.valor THEN t2.[data] ELSE t1.[data] END [Data],
CASE WHEN t2.valor > t1.valor THEN t2.valor ELSE t1.valor END Valor
FROM
tPosicional t1
LEFT JOIN tPosicional t2 on t1.posicao = t2.posicao - 1
WHERE
t1.posicao % 2 = 1



Ve se faz sentido. Se tiver alguma dúvida sobre algo, só avisar.
JCM0867 21/03/2023 22:23:53
#501194
DS2T,
Perfeito, funcionou 100% como precisava!
Muito Obrigado.
Tópico encerrado , respostas não são mais permitidas