从 groupBy 的“组”部分选择元素的首选方法是什么?(groupBy 导致 [key -> group] 关系)。如果可能的话,它应该会导致一个分贝命中,或者至少是一个恒定数量的命中。
例如,假设我们有一个 Locations(id) 和一个 Companies(id, locationId,foundedDate) 表。我们如何才能找到每个地点最古老的公司?
我会这样做:
Locations.join(Companies).on(_.id === _.locationId).groupBy(_._1).flatMap {
case (location, companies) =>
companies.map(_._2).sortBy(_.foundedDate).take(1).map {
company => (location, company)
}
}
但这会产生运行时异常:
scala.slick.SlickException: Unsupported query shape containing .groupBy without subsequent .map
at scala.slick.compiler.FuseComprehensions.fuse(Relational.scala:200)
...