Slick 3.0.0 聚合查询
Slick 3.0.0 Aggregate Queries
我正在尝试对两个表进行复杂的查询。它们如下所示:
Table1:
id:
name:
table2Id:
version:
Table2:
id:
comments:
假设我有代表这些表的适当的 Slick 类,我试图从 Table1 和 Table 2 中获取满足以下条件的所有元素:
Table1.table2Id === Table2.id and max(Table1.version)
我尝试了以下方法:
val groupById = (for {
elem1 <- table1Elems
elem2 <- table2Elems if elem1.id === elem2.id
} yield (elem1, elem2)).groupBy(_._1.id)
我知道我必须映射 groupById 并寻找最大版本,但我的语法不正确!有帮助吗?
我需要的是有效的 Slick 等效于以下 SQL 查询:
SELECT *
FROM t t1
WHERE t1.rev = (SELECT MAX(rev) FROM t t2 WHERE t2.id = t1.id)
模拟:
SELECT * from t t1 WHERE t1.rev = (SELECT max(rev) FROM t t2 WHERE t2.id = t1.id)
尝试以下任一方法:
val q1 = for{
t < table1 if t.rev === (
table2.filter(_.id === t.id).map(_.rev).max
)
} yield t
val q2 = table1.filter{t=> t.rev === (
table2.filter(_.id === t.id).map(_.rev).max
)}.map(identity)
根据评论编辑:
val q = (for{
t1 < table1; t2 <- table2 if t1.id === t2.id
} yield t1).orderBy(_.version.max).reverse.take(1)
我正在尝试对两个表进行复杂的查询。它们如下所示:
Table1:
id:
name:
table2Id:
version:
Table2:
id:
comments:
假设我有代表这些表的适当的 Slick 类,我试图从 Table1 和 Table 2 中获取满足以下条件的所有元素:
Table1.table2Id === Table2.id and max(Table1.version)
我尝试了以下方法:
val groupById = (for {
elem1 <- table1Elems
elem2 <- table2Elems if elem1.id === elem2.id
} yield (elem1, elem2)).groupBy(_._1.id)
我知道我必须映射 groupById 并寻找最大版本,但我的语法不正确!有帮助吗?
我需要的是有效的 Slick 等效于以下 SQL 查询:
SELECT *
FROM t t1
WHERE t1.rev = (SELECT MAX(rev) FROM t t2 WHERE t2.id = t1.id)
模拟:
SELECT * from t t1 WHERE t1.rev = (SELECT max(rev) FROM t t2 WHERE t2.id = t1.id)
尝试以下任一方法:
val q1 = for{
t < table1 if t.rev === (
table2.filter(_.id === t.id).map(_.rev).max
)
} yield t
val q2 = table1.filter{t=> t.rev === (
table2.filter(_.id === t.id).map(_.rev).max
)}.map(identity)
根据评论编辑:
val q = (for{
t1 < table1; t2 <- table2 if t1.id === t2.id
} yield t1).orderBy(_.version.max).reverse.take(1)