Alexander Ioffe
05/30/2025, 1:23 PMAlexander Ioffe
05/30/2025, 1:40 PM.frame(customWindow)
together with .free("custom sql")
.Arjan van Wieringen
05/30/2025, 5:18 PMAlexander Ioffe
05/30/2025, 6:29 PMdata class Customer(val name: String, val age: Int, val membership: String)
@CapturedFunction
fun ntile(c: Customer, n: Int) = capture.expression {
over()
.partitionBy(c.membership)
.orderBy(c.age)
.frame(free("NTILE($n)").invoke<Int>())
}
val q =
capture.select {
val c = from(Table<Customer>())
Data(
c.name,
ntile(c, 5).use,
ntile(c, 10).use,
ntile(c, 20).use,
)
}
// SELECT
// c.name,
// NTILE(5) OVER(PARTITION BY c.membership ORDER BY c.age) AS a,
// NTILE(10) OVER(PARTITION BY c.membership ORDER BY c.age) AS b,
// NTILE(20) OVER(PARTITION BY c.membership ORDER BY c.age) AS c
// FROM Customer c
Alexander Ioffe
05/30/2025, 7:01 PM