sql >> Base de Datos >  >> RDS >> PostgreSQL

Detectar filas con la misma combinación de números en las dos primeras columnas y seleccionar la que tiene el número más alto en la tercera columna

La idea es similar a esta . Puede crear dos columnas adicionales usando pmin un pmax para agrupar de la siguiente manera:

Una data.table solución. Pero si no desea data.table, aún puede usar la idea. Sin embargo, es muy poco probable que obtenga una solución más rápida que data.table con solo código R.

# assuming your data.frame is DF
require(data.table)
DT <- data.table(DF)
# get min of V1,V2 on one column and max on other (for grouping)
DT[, `:=`(id1=pmin(V1, V2), id2=pmax(V1, V2))]
# get max of V3
DT.OUT <- DT[, .SD[which.max(V3), ], by=list(id1, id2)]
# remove the id1 and id2 columns
DT.OUT[, c("id1", "id2") := NULL]

#     V1  V2     V3
# 1:   2   1    666
# 2: 100 102  23131
# 3:  10  19 124444
# 4:  10  15   1244
# 5: 100 110     23