EDIT: fixed a reference to one of the columns
Based on what you've listed, something like this should work:
SELECT
cfile.CUSTNUM,
aGENPOL.eff_date [LastOfeff_date],
bGENPOL.appnum [FirstOfAPPNUM]
FROM CUSTFILE cfile
CROSS APPLY (
SELECT TOP 1 *
FROM (
SELECT ROW_NUMBER() OVER(PARTITION BY entnum ORDER BY entnum) row, eff_date
FROM GENPOL
WHERE entnum = cfile.entnum
) x
ORDER BY row DESC
) aGENPOL
CROSS APPLY (
SELECT TOP 1 *
FROM (
SELECT ROW_NUMBER() OVER(PARTITION BY entnum ORDER BY entnum) row, appnum
FROM GENPOL
WHERE entnum = cfile.entnum
) y
ORDER BY row
) bGENPOL
Basically, the queries in the applies will grab the top record for each situation by partitioning the table by each entnum, and then ordering it by the row number (ascending for First, descending for Last).
Since the joined queries are fairly complicated, I also chose to use a CROSS APPLY
, as it essentially filters the records down before making the join.