Taking an example from FirebirdFAQ, you could do something like:
SELECT a.column1, a.column2, COUNT(b.column1) + 1 AS "rank"
FROM theTable a
LEFT JOIN theTable b ON a.column1 = b.column1 AND b.column2 < a.column2
GROUP BY 1, 2
In the upcoming Firebird 3 you can use the windows functions like RANK()
or ROW_NUMBER()
:
SELECT column1, column2,
RANK() OVER (PARTITION BY column1 ORDER BY column2) AS "rank"
FROM theTable a