过去几天我一直试图解决这个问题,而且我自己找不到答案,所以我希望有人能指出我的答案或帮助我自己。
问题是,假设我有两个不同的域 - 一个叫做vehicle,另一个叫做vehicle_history。现在,每当有人更改特定车辆时,就会在历史表中创建一个新对象/新条目。而我想要做的是,在不修改查询返回的数据(排序列表等)的情况下,进行查询以获取特定日期的每个车辆状态。
因为我知道我不是最好的解释我的问题,这里有一个例子:
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"
}
[我不能只使用投影来获取数据,因为查询需要获取的值之一是整数]
获取max' dateCreated'和' vehicle_id'使用(因为我需要vehicle_history_id而不是vehicle_id)
def query = VehicleHistory.where {
vehicle.id = vId
dateCreated = dtCreated
}
但事实证明这太慢了,因为表中可能有超过2万个条目。
我还没有添加剩余的过滤器,因为它们似乎与当前问题无关。
答案 0 :(得分:0)
VehicleHistory.withCriteria{
projections {
max 'dateCreated'
max 'vehicle.id'
groupProperty 'vehicle.id'
property 'id'
property 'state'
property 'amount'
}
}
应该