N = 2

lst = { { "Tyler Bennett","E10297",32000,"D101" },
    { "John Rappl","E21437",47000,"D050" },
    { "George Woltman","E00127",53500,"D101" },
    { "Adam Smith","E63535",18000,"D202" },
    { "Claire Buckman","E39876",27800,"D202" },
    { "David McClellan","E04242",41500,"D101" },
    { "Rich Holcomb","E01234",49500,"D202" },
    { "Nathan Adams","E41298",21900,"D050" },
    { "Richard Potter","E43128",15900,"D101" },
    { "David Motsinger","E27002",19250,"D202" },
    { "Tim Sampair","E03033",27000,"D101" },
    { "Kim Arlich","E10001",57000,"D190" },
    { "Timothy Grove","E16398",29900,"D190" }
      }

dep = {}
for i = 1, #lst do
    if dep[ lst[i][4] ] == nil then
    dep[ lst[i][4] ] = {}
    dep[ lst[i][4] ][1] = lst[i]
    else
    dep[ lst[i][4] ][#dep[lst[i][4]]+1] = lst[i]
    end
end

for i, _ in pairs( dep ) do
    table.sort( dep[i], function (a,b) return a[3] > b[3] end )

    print( "Department:", dep[i][1][4] )
    for l = 1, math.min( N, #dep[i] ) do
    print( "", dep[i][l][1], dep[i][l][2], dep[i][l][3] )
    end
    print ""
end
