Hola miguel20dh:
Hay varias formas de obtener lo que necesitas, una de las que más hemos tratado en este mismo foro es utilizar subconsultas y JOIN's...
En primer lugar, lo que te interesa filtrar es la fecha máxima para cada proyecto para un año en específico, esto lo haces con una consulta simple utilizando MAX y GROUP BY, es decir, hacer algo como esto:
Código MySQL:
Ver originalQuery OK, 0 rows affected (0.00 sec)
+----------------+------------+
| codigoproyecto
| MAX(fecha
) | +----------------+------------+
| 18 | 2016-09-10 |
+----------------+------------+
Query OK, 0 rows affected (0.00 sec)
+----------------+------------+
| codigoproyecto
| MAX(fecha
) | +----------------+------------+
| 18 | 2017-03-01 |
| 19 | 2017-04-09 |
+----------------+------------+
Observa que la consulta es la misma, lo único que cambia es el valor del parámetro @anio. Ahora, lo que haces es utilizar esto como una subconsulta para filtrar sólo los registros que necesitas, esto lo haces con un INNER JOIN
Código MySQL:
Ver originalQuery OK, 0 rows affected (0.00 sec)
-> ( SELECT codigoproyecto
, MAX(fecha
) maxfecha
-> GROUP BY codigoproyecto
) T2
ON T1.codigoproyecto
= T2.codigoproyecto
-> AND T1.fecha
= T2.maxfecha
; +---------+----------------+-------------------+------------+
| Estado | codigoproyecto | vercodigoproyecto | fecha |
+---------+----------------+-------------------+------------+
| anulado | 18 | 1 | 2016-09-10 |
+---------+----------------+-------------------+------------+
y funciona también para el año 2017, mostrando dos registros:
Código MySQL:
Ver originalQuery OK, 0 rows affected (0.00 sec)
-> ( SELECT codigoproyecto
, MAX(fecha
) maxfecha
-> GROUP BY codigoproyecto
) T2
ON T1.codigoproyecto
= T2.codigoproyecto
-> AND T1.fecha
= T2.maxfecha
; +----------+----------------+-------------------+------------+
| Estado | codigoproyecto | vercodigoproyecto | fecha |
+----------+----------------+-------------------+------------+
| borrado | 18 | 2 | 2017-03-01 |
| aceptado | 19 | 0 | 2017-04-09 |
+----------+----------------+-------------------+------------+
Esta consulta sirve SÍ Y SÓLO SI, para cada proyecto hay una única fecha MÁXIMA, es decir, si tienes fechas repetidas el resultado puede no ser el esperado.
Haz la prueba y nos comentas.
Saludos
Leo.