我正在尝试从表中获取最大版本号。我的表内容是:
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
作为结果返回,这肯定是错误的。我想我需要分组,但是我无法弄清楚如何编写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