查询唯一/不同的ID和状态日期

时间:2015-08-17 08:21:00

标签: hibernate grails gorm detachedcriteria

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

问题是,假设我有两个不同的域 - 一个叫做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万个条目。

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

1 个答案:

答案 0 :(得分:0)

VehicleHistory.withCriteria{   
  projections {
    max 'dateCreated'
    max 'vehicle.id'
    groupProperty 'vehicle.id'
    property 'id'
    property 'state'
    property 'amount'
  }
}

应该