Dúvida consulta no banco

Olá a todos, tenho uma tabela no banco que sua chave primaria é composta, pelo campo “CODIGO”, “ANO” e “MES”, uma PK “HIDROMETRO” e uma coluna “VALOR”. Eu precisava fazer uma consulta na qual me retorne o ultimo registro de cada hidrometro, por exemplo

CODIGO | ANO | MES | HIDROMETRO | VALOR |

19 | 2011 | 10 | 1 | 20,00 |
19 | 2011 | 11 | 1 | 30,00 |
20 | 2011 | 10 | 2 | 50,00 |
20 | 2011 | 11 | 2 | 10,00 |

Eu preciso que minha consulta me retorne os ultimos registro de cada hidrometro, no caso a minha consulta teria esse resultado:

CODIGO | ANO | MES | HIDROMETRO | VALOR |

19 | 2011 | 11 | 1 | 30,00 |
20 | 2011 | 11 | 2 | 10,00 |

Poderiam me ajudar como eu posso fazer essa consulta? Acho que criteria poderia ser uma solução legal, mas nao tenho um conhecimento muito profundo em criteria por isso estou pedindo ajuda aos senhores.

Desde já eu agradeço, obrigado.

Aí eu me pergunto, por que raios é preciso colocar 5 colunas como sendo PK?
Considerando que uma PK deve ser a chave pela qual TODOS os dados da tabela podem ser acessados, sem repetição, isso não é um exagero? Por que não criar uma coluna a mais e ir incrementando-a (com auto_increment, sequence ou identity)?
Creio que isso poderia ajudar

SELECT DISTINCT CODIGO, ANO, MES, HIDROMETRO, VALOR FROM TABELA WHERE MES = MAX(MES)

Isso pode ser feito em HQL sem problemas. Só adaptar ai.

Desculpe drsmachado, ela não é chave primaria e sim uma chave estrangeira, mil desculpas.

Crie uma coluna que represente a data de cadastro da linha, um timestamp, por exemplo, e faça a consulta ordenando de forma decrescente (ORDER BY coluna_data DESC), daí, pegue as 2 primeiras linhas, que representarão os últimos registros cadastrados.

Camarada, não tem que pedir desculpas.
Agora eu fiquei mais confuso.
Pelo que relatou, a tabela toda é PK (as cinco colunas), confere?

O que eu questionei é se isto é realmente necessário. Veja bem, chaves compostas são necessárias quando os dados da primeira PK elegível podem ser repetido. Então, escolhe-se a segunda coluna elegível a PK e concatena-se ambas. Se ainda pode haver repetição, adiciona-se outra…

Mas acho quase impossível isso acontecer, quando tem-se uma coluna que seja valorada com sequence ou auto_increment, certo?
A sugestão do camarada FabricioPJ é interessante, exceto pelo fato de que, havendo mais de 2 hidrômetros, já era.
Aliás, analisando a fundo, o que eu sugeri também está errado. Afinal, o MAX(mes) pode ser diferente para o hidrometro 1 para os demais (se for 10 para o hidrometro 1 e 9 para o hidrometro 2, já era).

Sem mexer na estrutura da tabela, fica meio inviável. O jeito seria trazer tudo para o nível da aplicação e tratar na aplicação, seja ela qual for (java, PHP, C#, C++).

Existem outros campos tbm amigo, mas quis resumir aqui, o campo VALOR como no exemplo nao eh uma FK, e nem campo eh auto increment nessa tabela. Mecher na tabela nao seria legal, é um banco para o delphi(firebird), essa minha aplicação eh um ws que gera um json desses dados, por isso nao posso mexer no banco. Estou usando criteria, mas agora o pixo pegou pro meu lado, rs, e nao sou muito fluente em criteria. Obrigado pela atenção de vcs.