gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 15:13:15 26 4
gpt4 key购买 nike

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

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 的显式使用class 有点丑,但还不错。此查询也应该可以作为 Where 查询使用,但似乎存在一个错误,这意味着您不能将 '==' 与聚合函数一起使用。修复错误后,您应该能够执行以下操作:
def colors = Color.where {
dateCreated == max(dateCreated)
}.property("name").property("shade").property("dateCreated").list()

请注意,用 '<' 替换 '==' 工作正常。

关于sql - 如何同时按最大日期和组获取 grails 中的记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14484883/

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