Tenho uma tabela na qual tenho consultas que retornam dados de um intervalo de tempo. As linhas são esparsas e os eventos podem ter dias de intervalo.
Estou procurando uma maneira de obter os dados do intervalo + adicionar a linha antes do início do intervalo (que pode ser em qualquer carimbo de data / hora menor que o início).
Por exemplo:
2020-01-01 xxxxxxx
2020-01-12 xxxxxxx
2020-02-10 xxxxxxx
2020-02-11 xxxxxxx
2020-02-15 xxxxxxx
Se eu consultar de 2020-02-08
para 2020-02-14
, obterei:
2020-02-10 xxxxxxx
2020-02-11 xxxxxxx
Mas gostaria de obter:
2020-01-12 xxxxxxx
2020-02-10 xxxxxxx
2020-02-11 xxxxxxx
Como isso pode ser feito?
Uma solução simples que dará o resultado desejado, mas para dados maiores você pode ter algum problema de desempenho.
Para encontrar o valor atual anterior de
2020-02-10
,Use a união para combinar com a pesquisa de intervalo,
Veja exemplo aqui
Isso deve ser mais rápido e simples:
violino
Com um índice ativado,
(dt)
você obtém duas varreduras de índice muito rápidas.Se houver duplicatas em
(dt)
, você terá que definir qual linha anterior selecionar ou aceitar a seleção arbitrária da consulta fornecida.Use
UNION ALL
, nãoUNION
, que tentaria remover duplicatas - o que é uma perda de tempo ou não é o que você deseja.UNION
também pode reordenar as linhas de resultado como efeito colateral.Sobre parênteses em
UNION
consultas:Isso normalmente retorna linhas classificadas por
dt
. Mas veja:Portanto, você pode acrescentar
ORDER BY dt
como comentado para garantir resultados classificados.