Pular para o conteúdo principal

Questão de Banco de Dados — Geral — CESPE / CEBRASPE 2026

Banco de DadosGeral
Código
ce391458
Banca
CESPE / CEBRASPE
Órgão
TCE RN
Ano
2026
Cargo
AudCE ( )
Um tribunal de contas implementou um data lake para auditoria contínua de contratos administrativos, utilizando ingestão incremental via CDC (change data capture). Os dados são armazenados na tabela contratos_cdc, que contém múltiplas versões de registros ao longo do tempo. A tabela contratos_cdc tem as colunas a seguir. • id_contrato (identificador do contrato); • valor (valor do contrato); • status (situação do contrato); • data_atualizacao (timestamp da alteração). Um auditor do referido tribunal deseja realizar a seguinte consulta SQL.   A partir das informações apresentadas e do trecho de código SQL precedente, julgue o item a seguir. No contexto de uma arquitetura de inteligência da informação para auditoria de dados, a consulta SQL apresentada utiliza a função de janela ROW_NUMBER() para segmentar os registros por contrato e ordená-los cronologicamente de forma decrescente; essa abordagem é eficaz para identificar a versão mais recente de cada contrato em uma tabela de CDC, sob a condição de que a coluna data_atualizacao tenha granularidade suficiente para garantir uma ordenação unívoca, evitando que registros distintos de um mesmo contrato apresentem o exato mesmo marcador temporal.Imagem associada para resolução da questão
  1. CCerto
  2. EErrado
Revelar gabarito e comentário

GabaritoC — Certo

Comentário gerado por IA. É um apoio ao estudo, ancorado em fontes, mas pode conter imprecisões — confira sempre na fonte oficial (lei, súmula, edital e gabarito da banca). Encontrou um erro? Use “Reportar”.

Funções de Janela em SQL – ROW_NUMBER() e CDC

Gabarito: Certo. A afirmação está correta porque a função de janela ROW_NUMBER() é, de fato, utilizada para segmentar os registros por contrato (partição por id_contrato) e ordená-los cronologicamente de forma decrescente (por data_atualizacao), permitindo identificar a versão mais recente de cada contrato em uma tabela de CDC. A ressalva sobre a necessidade de granularidade suficiente na coluna data_atualizacao para garantir uma ordenação unívoca também é tecnicamente precisa, pois, sem ela, registros distintos de um mesmo contrato poderiam apresentar o mesmo marcador temporal, comprometendo a identificação da versão mais recente.

A função ROW_NUMBER() é uma função de janela (window function) do SQL que atribui um número sequencial a cada linha dentro de uma partição, começando em 1. A sintaxe básica é ROW_NUMBER() OVER (PARTITION BY coluna_particao ORDER BY coluna_ordenacao). No contexto da questão, a partição é feita por id_contrato, o que significa que a numeração é reiniciada para cada contrato. A ordenação é feita por data_atualizacao DESC, o que faz com que a linha mais recente de cada contrato receba o número 1. Assim, ao filtrar as linhas com ROW_NUMBER() = 1, obtém-se a versão mais recente de cada contrato.

A técnica é amplamente utilizada em arquiteturas de dados para auditoria e análise de dados históricos, especialmente em tabelas de CDC (Change Data Capture), onde cada alteração em um registro gera uma nova linha com um timestamp. A principal vantagem é que ela permite reconstruir o estado atual de cada entidade sem a necessidade de tabelas auxiliares ou consultas complexas com GROUP BY e MAX.

A ressalva sobre a granularidade da coluna data_atualizacao é crucial. Se dois registros de um mesmo contrato tiverem exatamente o mesmo timestamp, a ordenação por data_atualizacao não será unívoca, e o ROW_NUMBER() atribuirá números de forma arbitrária entre esses registros empatados. Isso pode fazer com que a versão selecionada como "mais recente" não seja a correta. Para evitar esse problema, é comum adicionar uma coluna de sequência (como um ID incremental) ou usar uma coluna de timestamp com maior precisão (como nanossegundos) na cláusula ORDER BY.

A pegadinha que a banca explora aqui é a tentação de achar que a ressalva sobre a granularidade torna a afirmação incorreta. Na verdade, a ressalva é uma condição necessária para que a abordagem seja eficaz, e a afirmação a reconhece explicitamente, tornando-a correta. O candidato que não conhece o funcionamento das funções de janela pode achar que a ressalva é uma falha, mas ela é, na verdade, um requisito técnico válido.

Guarde a distinção entre ROW_NUMBER(), RANK() e DENSE_RANK(): enquanto ROW_NUMBER() atribui números sequenciais únicos, RANK() e DENSE_RANK() lidam com empates de forma diferente. Essa distinção é frequentemente cobrada em provas e é essencial para resolver questões sobre funções de janela.

  1. 1PARTITION BY id_contrato
  2. 2ORDER BY data_atualizacao DESC
  3. 3ROW_NUMBER() = 1 → versão atual
LEVEL · soulevel.com.br

Item — ✅ Correto ⟵ GABARITO

A afirmação está correta. A função ROW_NUMBER() é usada para segmentar os registros por contrato (via PARTITION BY id_contrato) e ordená-los cronologicamente de forma decrescente (via ORDER BY data_atualizacao DESC). Isso permite identificar a versão mais recente de cada contrato, pois a linha com número 1 em cada partição é a mais recente. A condição sobre a granularidade da coluna data_atualizacao é tecnicamente válida, pois, sem ela, empates no timestamp poderiam gerar uma ordenação não unívoca, comprometendo a identificação correta da versão mais recente.

Gabarito: Certo

Link permanente: /questoes/ce391458