当前位置: 首页 > 面试题库 >

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

白赞
2023-03-14
问题内容

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

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()

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



 类似资料:
  • 我有一个熊猫DataFrame看起来像这样: 我的目标是能够为每个项目计算每个日期之间的价值差异。例如,我想找到A项: 12(32-20,因为最大年份是2012年,最小年份是2010年)和B项:20 (40 - 20,因为最大年份是2019年,最小年份是2016年)。 我使用以下代码获取每个项目的年最大值和年最小值: 然后,我找到每个项目的年份最小值和年份最大值。然而,我坚持做我想要的。

  • 在SQL中,如何按查询分组获取计数中的最小/最大日期? 查询: --这并没有给出文件的最小和最大接收日期 预期输出...与SourceId、Count、StartDate(最小值)、EndDate(最大值)一起

  • 初始数据: 使用此查询: 我得到: 但我需要分组“quotite”时,下一行是相同的,并显示第一行的开始日期和最后一行的日期。 预期结果: gordon提供的解决方案: 选择agenhi,tacthi,min(dtfihi)作为start_date,lead(max(dtfihi))over(按agenhi分区,seqnum-seqnum_2按max(dtfihi)排序)作为end_date,fr

  • 问题内容: 我有一个这样的收藏: 我如何从MongoDB获得最新记录,而日期时间是最新记录?我只想要一条记录。 问题答案: 使用和:

  • 问题内容: 我下面有日期数组 并想知道 最近的日期, 例如:最接近今天的日期。 我怎样才能做到这一点? 问题答案: 循环执行,将值转换为日期,然后将最新的值存储在var中。 诸如此类的东西…您就知道了如果您想获得今天之前的最新信息:

  • 问题内容: 我想从 handleClick 函数中给定的日期列表中获得最大日期。如何使用 moment.js 从日期列表中找到最大日期? 我有以下代码: 问题答案: 您可以使用moment.max函数: