Supongamos que tengo que hacer ciertas queries para sacar información de una base de datos que no he diseñado yo, y sobre cuyo diseño tengo ciertas cosas que decir.
Supongamos que en la base de datos guardas información de un producto, y de todas sus versiones, y quieres hacer una select que saque información SOLO de la última versión, pero no quieres tener que hacer un procedimiento almacenado ni nada por el estilo, simplemente quieres hacer una select que te saque el registro con la información correspondiente a esa última versión.
Vamos, devolver la fila con el mayor valor de cierta columna para una agrupación.
La respuesta hacerlo sin usar ni subqueries ni procedimientos almacenados está, cómo no, en este hilo de StackOverflow. Y como siempre, para los que de inglés no pilotan demasiado bien, aquí tenéis mi explicación para gente como yo (pa tontos, vaya):
SELECT DISTINCT
, first_value([campo]) OVER (PARTITION BY [id] ORDER BY [campo] DESC) AS [campo]
FROM [tabla] WHERE [condiciones]
Donde [campo] es la columna de la que se quiere seleccionar la última versión, e [id] es la “clave” de la agrupación de la que queremos la última versión. Es muy importante que la select tenga “DISTINCT” porque si no va a devolver registros repetidos.
En mi caso las versiones estaban en una tabla diferente a la información del producto, pero con las joins adecuadas y poniendo el alias de la tabla delante de los campos no hay ningún problema, devuelve la última versión.
…………………………………………………………………………….
Espero que esta entrada pueda ser de utilidad, y si no, como siempre, aquí tenéis un gato para compensar.