我正在尝试编写一个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之后.