Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

199
Vistas
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 Respuestas
Responde la pregunta

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 Denunciar

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 Denunciar

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 Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda