Table 中的 Slick 2.1.0 过滤器最大版本

Slick 2.1.0 Filter Max Version in a Table

我正在尝试从 table 获取最大版本号。我的 table 内容是:

id externalId name version
1  10         n1   1
2  65         n2   2
3  10         n3   2
4  77         n4   1 

在上面的 table 中,我们有最大版本为 2 的行,因此我的查询必须 return 我传递给查询的给定 externalId 的最大版本行。

我现在坚持写它的 Slick 版本。有什么建议,指点吗?这是我到目前为止所拥有的:(我传入了 externalId)

for { 
myTable1 <- myTable1Elems
    if myTable1.version === (
      myTable1Elems
        .filter(_.externalId === s"$externalId")
        .map(_.version)
        .max
  )
} yield myTable1

这似乎做错了,因为我的测试表明,当我询问 externalId = 77 的最大版本时,它 returns 2 行。我得到了两个

1  10         n1   1
4  77         n4   1

returned 作为结果肯定是错误的。我想我需要 groupBy,但我就是不知道如何编写 Slick 组合器!有帮助吗?

所以我设法解决了这个问题:

private def configMaxVersionFilter(extId: String) = for {
  tbl <- myTable1Elems
  if tbl.externalId === s"$extId" && tbl.version === (
    myTable1Elems
      .filter(_.externalId === s"$extId")
      .map(_.version)
      .max
    )
} yield tbl