Top rank per group: Difference between revisions

No edit summary
Line 6,266:
Version using built-in database-like functionality.
 
<lang scheme>#lang transd
#lang transd
 
 
MainModule: {
tbl : String(
`EmployeeName,@key_EmployeeIDEmployeeID,Salary:Int,Department
"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"`),
 
N: 2,
_start: (λ
(with basetabl TSDBaseTable()
(load-table basetabl tbl)
(build-index basetabl "Department")
(with rows (tsd-query basetabl
select: ["Department"]
as: [[String()]] :distinct sortby: "Department" )
(for row in rows :distinct do
(with recs (tsd-query tabl sortby: "Department" )
(forselect: rowall in rows do
as: [[String(with), recsString(), Int(tsd-query base), String()]]
satisfying: (lambda Department select: allString()
as: [[String(),eq Department String(),get Int(row 0))), String()]]
sortby: "Salary" :desc
where: (lambda Department String() (eq Department (get row 0)))
sortby: "Salary" limit:desc N)
(for rec in recs do (textout rec limit: N"\n")))))))
(for rec in recs do (textout rec "\n"))
)))))
}</lang>{{out}}
<pre>
111

edits