sql – 在Slick 3.x中按组从列中选取最大项目

我正在尝试编写一个Slick查询来查找组中的“max”元素,然后根据该结果继续查询,但是当我尝试我认为显而易见的方式时,我遇到了一个大错误:

val articlesByUniqueLink = for {
  (link, groupedArticles) <- historicArticles.groupBy(_.link)
  latestPerLink <- groupedArticles.sortBy(_.pubDate.desc).take(1)
} yield latestPerLink

由于这似乎不起作用,我想知道是否有其他方法可以从上面的“groupedArticles”中找到“latest”元素,假设这些元素来自带有pubDate时间戳的Article表和可以复制的链接.我正在寻找HAVING articles.pub_date = max(articles.pub_date).

表达它的另一种等效方式产生相同的结果:

val articlesByUniqueLink = for {
  (link, groupedArticles) <- historicArticles.groupBy(_.link)
  latestPerLink <- groupedArticles.filter(_.pubDate === groupedArticles.map(_.pubDate).max.get)
} yield latestPerLink

[SlickTreeException:在解析monadic之后无法访问s2连接50行Slick节点树.

最佳答案 我发现在Slick中每组获得最大或最小等的最佳方法是在分组结果上使用自联接:

val articlesByUniqueLink = for {
  (article, _) <- historicArticles join historicArticles.groupBy(_.link)
      .map({case (link, group) => (link, group.map(_.pubDate).max)})
          on ((article, tuple) => article.link === tuple._1 && 
              article.pubDate === tuple._2)
} yield article

如果有可能在条件下产生重复项,只需删除重复项,如this之后.

点赞