Slick 2.1.0过滤表中的最大版本

时间:2015-05-22 23:32:18

标签: sql scala group-by slick

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

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

在上表中,我们的行的最大版本为2,因此我的查询必须返回我传递给查询的给定externalId的最大版本行。

我现在很难写出它的Slick版本。有什么建议,指点?这是我到目前为止:(我传入externalId)

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

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

1  10         n1   1
4  77         n4   1

返回结果肯定是错误的。我想我需要groupBy,但我无法弄清楚如何编写Slick组合器!有什么帮助吗?

1 个答案:

答案 0 :(得分:0)

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

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