gpt4 book ai didi

postgresql - Squeryl:如何在日期列上使用 postgres 的 date_trunc() 函数创建聚合查询

转载 作者:行者123 更新时间:2023-11-29 12:21:54 24 4
gpt4 key购买 nike

给定以下实体类和带有相关表的 postgres 数据库:

case class Statistics(name: String, 
measure: Long,
datetime: Timestamp = new Timestamp(System.currentTimeMillis))

我如何构造一个 Squeryl 聚合查询来返回每天或每周的度量计数或它们的累积值,基本上导致类似于以下的 SQL 语句:

select count(*), date_trunc('day',datetime) from stats
group by date_trunc('day',datetime);
select sum(*), date_trunc('day',datetime) from stats
group by date_trunc('day',datetime);

使用 postgres 的 date_trunc不能直接从 Squeryl 访问的函数。

最佳答案

可以使用自定义函数映射生成所需的查询:

class DateTrunc(span: String, 
e: DateExpression[Timestamp],
m: OutMapper[Timestamp])
extends FunctionNode[Timestamp]("date_trunc",
Some(m),
Seq(new TokenExpressionNode("'"+span+"'"), e))
with DateExpression[Timestamp]

def dateTrunc(span: String,
e: DateExpression[Timestamp])
(implicit m: OutMapper[Timestamp]) = new DateTrunc(span,e,m)

这可以在实际查询中使用,例如:

def historyQuery(name: String, 
span: String = "day",
pageSize: Int = 10) = from(table) (
stats =>
where(stats.name === name)
groupBy(dateTrunc(span,stats.datetime))
compute(count)
orderBy(dateTrunc(span,stats.datetime) desc)
) page(0,pageSize)

关于postgresql - Squeryl:如何在日期列上使用 postgres 的 date_trunc() 函数创建聚合查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17804104/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com