You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用ScalikeJDBC编写带max函数的SQL查询获取最大日期?

解决ScalikeJDBC查询最大日期时列名找不到的问题

嘿,我懂你遇到的这个小坑了——当你用max()聚合函数后,直接用原列名去取结果就会报错,这是因为数据库返回的结果集里,聚合后的列名已经不是原来的<column>啦!不同数据库的处理逻辑不太一样,有的会把列名设成max(<column>),有的甚至没有明确列名,所以ScalikeJDBC自然找不到你指定的原列名。

给你两个最简的解决办法:

方法1:给聚合结果起别名(推荐)

在SQL里给max(<column>)指定一个清晰的别名,之后用别名来获取结果,代码可读性也更强:

val maxDate: Option[String] = DB readOnly { implicit session => 
  sql"select max(<column>) as max_date from <table>"
    .map(rs => rs.string("max_date"))
    .first
    .apply() 
}

这里把聚合后的列别名为max_date,之后用rs.string("max_date")就能精准拿到值了。

方法2:通过列索引获取

因为你的查询只返回一列结果,所以可以直接用列的索引来获取(ScalikeJDBC的结果集索引是从1开始的):

val maxDate: Option[String] = DB readOnly { implicit session => 
  sql"select max(<column>) from <table>"
    .map(rs => rs.string(1))
    .first
    .apply() 
}

这种方式不用修改SQL,但如果后续查询新增了列,索引可能会发生变化,所以还是第一种别名的方式更稳妥。

内容的提问来源于stack exchange,提问作者horatio1701d

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 04:32:59