Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

205
Visualizações
Seleccione solo las filas con la última fecha en postgres

Solo quiero la última fecha para cada fila (casa), el número de entradas por casa varía, a veces puede haber una venta, a veces varias.

 Date of sale | house number | street | price |uniqueref -------------|--------------|--------|-------|---------- 15-04-1990 |1 |castle |100000-| 1xzytt 15-04-1995 |1 |castle |200000-| 2jhgkj 15-04-2005 |1 |castle |800000-| 3sdfsdf 15-04-1995 |2 |castle |200000-| 2jhgkj 15-04-2005 |2 |castle |800000-| 3sdfsdf

Lo que tengo funcionando es lo siguiente

Crear VIEW as (v_orderedhouses) ORDER BY número de casa, calle con fecha ordenada en DESC para que se devuelva primero la fecha más reciente.

Luego introduzco eso en otra VIEW (v_latesthouses) usando DISTINCT ON (número de casa, calle). que me da;

 Date of sale | house number | street | price |uniqueref -------------|--------------|--------|-------|---------- 15-04-2005 |1 |castle |800000-| 3sdfsdf 15-04-2005 |2 |castle |800000-| 3sdfsdf

Esto funciona, pero parece que debería haber una solución más elegante. ¿Puedo acceder a la vista filtrada en un solo paso?

over 4 years ago · Santiago Trujillo
3 Respostas
Responde à pergunta

0

No necesita crear un montón de vistas, solo:

 select distinct on(street, house_number) * from your_table order by street, house_number, -- those fields should be in the "order by" clause because it is in the "distinct on" expression date_of_sale desc;

Para hacer esta consulta más rápida, puede crear un índice de acuerdo con el order by :

 create index index_name on your_table(street, house_number, date_of_sale desc);

No olvides analyse tus tablas regularmente (dependiendo de la velocidad de crecimiento):

 analyse your_table;
over 4 years ago · Santiago Trujillo Relatório

0

Puede usar la función de ventana row_number para esto

 select * from ( select your_table.*, row_number() over(partition by house_number order by Date_of_sale desc) as rn from your_table ) tt where rn = 1
over 4 years ago · Santiago Trujillo Relatório

0

Esto es lo que uso y funciona rápido (es una solución genérica, hasta donde probé, cada software de base de datos puede hacer esto):

 SELECT t1.date_of_sale, t1.house_number FROM table t1 LEFT JOIN table t2 ON (t2.house_number = t1.house_number AND t2.date_of_sale>t1.date_of_sale) WHERE t2.pk IS NULL GROUP BY t1.date_of_sale, t1.house_number
over 4 years ago · Santiago Trujillo Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda