top of page

Indexando ou Enumerando tabela - SQL SERVER

  • Foto do escritor: Amanda Nascimento
    Amanda Nascimento
  • 15 de set. de 2023
  • 2 min de leitura

Atualizado: 19 de mar.


Indexar por data agrupando por uma coluna específica


Um desafio recorrente que vejo é ter apenas uma coluna de data como se fosse um registro, e ter demais registros de um mesmo id, linha a linha. Com isso, muitos os casos precisamos fazer alguns ajustes na tabela para poder fazer cálculos com as datas e gerar métricas.


Então, a primeira coisa que vou inserir na query é um indexador por data agrupando por uma coluna específica que no meu caso, irei utilizar a coluna chapa


ROW_NUMBER() OVER (PARTITION BY chapa ORDER BY data ASC) AS indexador,


Agora que consegui criar um indexador por chapa e em ordem crescente de datas, consigo visualizar na tabela acima que a chapa em questão teve apenas 3 registros.


Com a função LEAD() eu busco a data do próximo registro mantendo os mesmos critérios de data e por chapa, com isso, terei a data final. Neste exemplo, consigo agora calcular o tempo de cargo pois agora tenho uma data inicial e uma data final. Se for o último registro, utilizo getdate() que é a data de hoje do sistema e consigo fazer o cálculo com a data atual. O indexador é útil apenas para visualizarmos e validarmos os dados para fazer sentido. Podemos utilizar diretamente a função abaixo:


FORMAT(COALESCE(LEAD(data) OVER (PARTITION BY chapa ORDER BY data ASC), GETDATE()), 'dd/MM/yyyy') AS next_registro,



Desta forma consigo utilizar o datediff para calcular a diferença de dias entre a data inicial e final da nossa query para cada linha.





Enumerando uma coluna em ordem numérica


NEWID() para gerar uma ordem aleatória criada em uma nova coluna chamada Numero


SELECT *, ROW_NUMBER() OVER (ORDER BY NEWID()) AS Numero

FROM D_CALENDARIO




Enumerando através da coluna criada chamada Numero e ordenando a coluna dia


SELECT *, ROW_NUMBER() OVER (ORDER BY dia) AS Numero

FROM D_CALENDARIO



Enumerando através da coluna criada chamada Numero e ordenando em ordem descente pela coluna de data


SELECT *, ROW_NUMBER() OVER (ORDER BY DATA) AS Numero

FROM D_CALENDARIO

© 2017-2025  Criado e desenvolvido por Amanda Nascimento

  • Discord
  • GitHub
  • youtube
  • LinkedIn Amanda
bottom of page