1

我正在尝试按一个字段和连接查询的计数对我的查询进行排序。那是我的 SQL:

SELECT * FROM stmt s 
LEFT JOIN rctn r ON s.id = r.stmt_id 
GROUP BY s.id 
ORDER BY (s.time + INTERVAL 1*COUNT(r.stmt_id) DAY) DESC

我已经有了

stmts.where(_.orgid === orgId)
    .innerJoin(rctns).on(_.id === _.stmtId)
    .groupBy(_._1.id)

,但我不知道如何进行排序。

有任何想法吗?

4

1 回答 1

4

非常类似于 Scala 集合:

stmts.filter(_.orgid === orgId)
  .innerJoin(rctns).on(_.id === _.stmtId)
  .groupBy(_._1.id)
  .sortBy{ case (s_id,group) =>
    group.map(_._1.time).max + interval(
      group.map(_._2.stmtId).length,
      "DAY"
    )
  }

.max是一个 hack,因为我们目前不支持.head,你必须在 Scala 集合中使用它。请注意,intervalSlick 不附带此功能,您必须使用该SimpleExpression构造自己定义它,请参阅http://slick.typesafe.com/doc/2.0.2/userdefined.html#scala-database-functions

请注意,过去我们在 Slick 中的 group by 比其他操作有更多的错误。SQL 使用了很多类型技巧(标识符在集合和标量值之间更改类型等),这些技巧在映射到 Scala 语义时很难正确处理。我们所知道的事情现在是固定的。如果您遇到生成无效 SQL 的情况,请报告一个错误,以便我们重现该问题。

于 2014-06-25T18:22:20.563 回答