extrayendo la última fila para cada id en postgresql
Considere un conjunto de datos con columnas nombradas id, fecha y otro_info. El objetivo es extraer la última información (fila) para cada identificación única.
para lograr esto en PostgreSQL, se usan comúnmente dos métodos:
Distintos en operador
Postgresql proporciona el operador distinto, lo que le permite especificar que solo se especifique que los valores distintos de una columna particular de una columna particular. En este caso, el operador se puede usar de la siguiente manera:Seleccione distinto en (id) id, fecha, otro_info de The_Table Orden por id, date descr;
select distinct on (id) id, date, another_info from the_table order by id, date desc;Esta consulta asegura que solo se devuelva la última instancia de cada identificación única, se ordene en orden descendente por fecha.
Window Functions
Alternativamente, puede usar las funciones de la ventana para lograr el mismo resultado. Una función de ventana le permite realizar cálculos o agregaciones en un conjunto dividido de filas. En este caso, se puede usar la siguiente consulta:Seleccione ID, Fecha, otro_info de ( Seleccione ID, fecha, otro_info, row_number () Over (Partition por orden de identificación por fecha Desc) como RN de The_Table ) t donde rn = 1 orden por id;
select distinct on (id) id, date, another_info from the_table order by id, date desc;Esta consulta usa la función row_number () para asignar un número secuencial a cada fila dentro de cada partición de ID. La cláusula Where filtra los resultados para incluir solo las filas con el valor RN más alto (es decir, la última fila para cada ID).
Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.
Copyright© 2022 湘ICP备2022001581号-3