Top rank per group: Difference between revisions

Content added Content deleted
No edit summary
Line 6,266: Line 6,266:
Version using built-in database-like functionality.
Version using built-in database-like functionality.


<lang scheme>
<lang scheme>#lang transd
#lang transd




MainModule: {
MainModule: {
tbl : String(
tbl : String(
`EmployeeName,@key_EmployeeID,Salary,Department
`EmployeeName,EmployeeID,Salary:Int,Department
"Tyler Bennett", "E10297",32000,"D101"
Tyler Bennett, E10297,32000,D101
"John Rappl", "E21437",47000,"D050"
John Rappl, E21437,47000,D050
"George Woltman", "E00127",53500,"D101"
George Woltman, E00127,53500,D101
"Adam Smith", "E63535",18000,"D202"
Adam Smith, E63535,18000,D202
"Claire Buckman", "E39876",27800,"D202"
Claire Buckman, E39876,27800,D202
"David McClellan", "E04242",41500,"D101"
David McClellan,E04242,41500,D101
"Rich Holcomb", "E01234",49500,"D202"
Rich Holcomb, E01234,49500,D202
"Nathan Adams", "E41298",21900,"D050"
Nathan Adams, E41298,21900,D050
"Richard Potter", "E43128",15900,"D101"
Richard Potter, E43128,15900,D101
"David Motsinger", "E27002",19250,"D202"
David Motsinger,E27002,19250,D202
"Tim Sampair", "E03033",27000,"D101"
Tim Sampair, E03033,27000,D101
"Kim Arlich", "E10001",57000,"D190"
Kim Arlich, E10001,57000,D190
"Timothy Grove", "E16398",29900,"D190"`),
Timothy Grove, E16398,29900,D190`),


N: 2,
N: 2,
_start: (λ
_start: (λ
(with base TSDBase()
(with tabl Table()
(load-table base tbl)
(load-table tabl tbl)
(build-index base "Department")
(build-index tabl "Department")
(with rows (tsd-query base
(with rows (tsd-query tabl
select: ["Department"]
select: ["Department"]
as: [[String()]]
as: [[String()]] :distinct sortby: "Department" )
:distinct
(for row in rows do
sortby: "Department" )
(with recs (tsd-query tabl
(for row in rows do
select: all
(with recs (tsd-query base
as: [[String(), String(), Int(), String()]]
select: all
satisfying: (lambda Department String()
as: [[String(), String(), Int(), String()]]
(eq Department (get row 0)))
sortby: "Salary" :desc
where: (lambda Department String() (eq Department (get row 0)))
sortby: "Salary" :desc
limit: N)
limit: N)
(for rec in recs do (textout rec "\n")))))))
(for rec in recs do (textout rec "\n"))
)))))
}</lang>{{out}}
}</lang>{{out}}
<pre>
<pre>