PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Détecter les lignes avec la même combinaison de nombres dans les deux premières colonnes et sélectionner celle avec le nombre le plus élevé dans la troisième colonne

L'idée est similaire à celle-ci . Vous pouvez créer deux colonnes supplémentaires en utilisant pmin un pmax à regrouper comme suit :

Un data.table la solution. Mais si vous ne voulez pas data.table, vous pouvez toujours utiliser l'idée. Cependant, il est hautement improbable que vous obteniez plus rapidement que la solution data.table avec juste du code 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