If you needed to run more than one query against this you could simply build a temp table to hold the subquery data:
SQL
SELECT MAX(gchg_alias.effective)
INTO #Temp
FROM gchg As gchg_alias
WHERE gchg_alias.id = gchg.id
SELECT
gchg.id,
grup.desc_,
gchg.effective,
grup.type
FROM
gchg,grup,#temp
WHERE grup.rowno = gchg.rowno_grupgchg_grup
And grup.type = 'revenue'
And grup.status = 'active'
AND gchg.effective = #temp.gchg_alias.effective
ORDER BY
gchg.id ASC
Display More
This would make no difference if you are just running the one query, but if you wanted to run more than one against the same subset it would be much quicker.