sql >> Base de Datos >  >> RDS >> Oracle

Seleccione la última fila para cada grupo de Oracle

Puede usar funciones analíticas

SELECT *
  FROM (SELECT c.*,
               rank() over (partition by user_id order by ts desc) rnk
          FROM comments c)
 WHERE rnk = 1

Dependiendo de cómo desee manejar los vínculos (si puede haber dos filas con el mismo user_id y ts ), es posible que desee utilizar el row_number o dense_rank función en lugar de rank . rank permitiría que varias filas fueran las primeras si hubiera un empate. row_number devolvería arbitrariamente una fila si hubiera un empate. dense_rank se comportaría como rank para las filas que empataron en primer lugar, pero considerarían que la siguiente fila sería la segunda en lugar de la tercera, suponiendo que dos filas empataran en primer lugar.