想象一下grails中的以下问题
您有某种带有数字属性的审计跟踪域类。例如,写一个scrum项目当前燃尽值的类:
class burndown {
Date createDate
int value
}
每次更新任务时,您的项目都会使用此类来存储当前的燃尽值 - 这意味着每天都会有几次。
现在,您想要绘制一张图表,其中包含每天的最后存储值 。
对此的SQL语句可能类似于
select
*
from
table
where
id in (
select
max(id)
from
table
group by
TO_CHAR(create_date,'yyyyddmm')
)
现在我的问题是:你如何用grails进行这样的查询?
如果我必须使用这样的SQL语句,如何避免在声明中硬编码表和列名?
PS:此代码尚未经过测试。刚从我的脑海里写下来......但我猜你觉得我想要问什么
答案 0 :(得分:3)
对于初学者,您很可能希望将createDate
重命名为dateCreated
,因为如果您使用该名称,Grails会自动为您设置,因此您只需指定“真实”的值该类的属性。但这对这个问题并不重要。
如果你想按照创建日期获得最新的项目,可以采用几种不同的方式来做到这一点,但我认为这是最有意义的:
def mostRecent = Burndown.listOrderByDateCreated(max: 1, order: 'desc')[0]
或者如果你保留你的名字
def mostRecent = Burndown.listOrderByCreateDate(max: 1, order: 'desc')[0]
这在http://grails.org/doc/latest/描述 - 这是一本很好的手册,值得一读。
答案 1 :(得分:1)
不是Grails用户,所以下面应该由Grails'ist
进行相应的更正如果域名相关,请尝试以下操作:
Foo.findAllInList(Bar.list([group:'create_date']))