如何按最大日期和组同时获取Grails中的记录

我有一个看起来像这样的表:

id    name      shade        date_created

---- ----- ------- ---------------

1 Red bright 10-28-2012

2 Orange light 10-28-2012

3 Red <null> 10-24-2013

4 Orange light 10-24-2013

预期结果:

id    name   value    date_created

---- ----- ------ ---------

3 Red <null> 10-24-2013

4 Orange light 10-24-2013

我该如何使用GORM来获得此结果?

在纯SQL中,这是使我获得所需结果的查询:

SELECT t.name, t.shade, r.MaxTime

FROM (SELECT name, MAX(date_created) as MaxTime

FROM colorable

GROUP BY name) r

INNER JOIN colortable t ON t.name = r.name AND t.date_created = r.MaxTime

    def c = Color.createCriteria()

def results = c {

projections {

groupProperty("name")

max("dateCreated")

}

}

但是我不知道如何从投影中获取更多列?即shade

回答:

如果您使用的是Grails 2.0或更高版本,则可以使用分离的条件来执行此操作:

def colors = Color.withCriteria {

eq "dateCreated", new grails.gorm.DetachedCriteria(Color).build {

projections {

min "dateCreated"

}

}

projections {

property "name"

property "shade"

property "dateCreated"

}

}

DetachedCriteria该类的显式使用有点丑陋,但还算不错。该查询也可以作为Where查询使用,但是似乎存在一个错误,这意味着您不能对聚合函数使用’==’。修复错误后,您应该可以执行以下操作:

def colors = Color.where {

dateCreated == max(dateCreated)

}.property("name").property("shade").property("dateCreated").list()

请注意,用’<’替换’==’可以正常工作。

以上是 如何按最大日期和组同时获取Grails中的记录 的全部内容, 来源链接: utcz.com/qa/404009.html

回到顶部