【问题标题】:Querying for Unique/Distinct IDs and state Date查询唯一/不同的 ID 和状态日期
【发布时间】:2015-08-17 08:20:59
【问题描述】:

过去几天我一直在尝试解决这个问题,但我自己找不到答案,所以我希望有人能指出我的答案或自己帮助我。

问题是,假设我有 2 个不同的域 - 一个称为车辆,另一个称为车辆历史。现在,每次有人更改特定车辆时,都会在历史表中创建一个新对象/新条目。而我想要做的是进行查询,在特定日期之前获取每辆汽车的状态,而不修改查询返回的数据(排序列表等)。

因为我知道我不擅长解释我的问题,所以这里有一个例子:

id     vehicle_id  date_created  state  
1      1           12.08.2015    291
2      2           12.08.2015    212
3      1           14.08.2015    302
4      1           18.08.2015    201

第4列有什么数据并不重要,我们只知道我们不能根据它查询。

因此,目前,如果我进行了没有日期的查询,它应该只返回两个条目:2 和 4。如果我使用日期 16.08.2015 进行查询,它应该返回:2 和 3。

我发现其中一种工作方式是查询数据库并进行预测

                projections {
                    max "dateCreated"
                    groupProperty "vehicle.id"
                    groupProperty "vehicle"
                }

[而且我不能只使用投影来获取数据,因为我需要通过查询获得的值之一是整数]

获取要使用的最大“dateCreated”和“vehicle_id”(因为我需要vehicle_history_id 而不是vehicle_id)

def query = VehicleHistory.where {
    vehicle.id = vId
    dateCreated = dtCreated
}

但事实证明这太慢了,因为表中可能有超过 20,000 个条目。

我没有添加其余过滤器,因为它们似乎与当前问题无关。

【问题讨论】:

  • [and I can't just use projections to get the data, because one of the values that I need to get with the query is an integer]我没听懂
  • 如果我尝试添加 GroupProperty 或属性,它会告诉我:错误:列必须出现在 GROUP BY 子句中或用于聚合函数中,如果我尝试添加 groupProperty('amount ') 或 groupProperty('id') 然后它只返回所有不同的

标签: hibernate grails grails-orm detachedcriteria


【解决方案1】:
VehicleHistory.withCriteria{   
  projections {
    max 'dateCreated'
    max 'vehicle.id'
    groupProperty 'vehicle.id'
    property 'id'
    property 'state'
    property 'amount'
  }
}

应该这样做

【讨论】:

  • org.postgresql.util.PSQLException: 错误:列“this_.id”必须出现在 GROUP BY 子句中或用于聚合函数中
猜你喜欢
  • 2021-05-05
  • 1970-01-01
  • 1970-01-01
  • 2020-11-09
  • 1970-01-01
  • 2011-12-06
  • 2021-02-27
  • 1970-01-01
  • 2014-06-01
相关资源
最近更新 更多