我在NHibernate中映射了以下两个表:
VehicleCheck
ID (int)
VehicleReg (varchar)
DriverName (varchar)
TS (datetime)
VehicleCheckItem
ID (int)
VehicleCheckID (int)
CheckType (int)
Passed (bit)
我想要做的是使用HQL或Criteria API获取每辆车的最新车辆检查和每辆车检查失败的数量。
在SQL中,这看起来像:
select VehicleCheck.ID, VehicleCheck.VehicleReg, VehicleCheck.DriverName,
VehicleCheck.TS, CheckItems.FailCount
FROM VehicleCheck
JOIN
(select VehicleReg, Max(TS) TS
FROM VehicleCheck
GROUP BY VehicleReg) LastChecks
ON LastChecks.VehicleReg = VehicleCheck.VehicleReg and LastChecks.TS = VehicleCheck.TS
LEFT OUTER JOIN
(select VehicleCheckID, Count(Passed) FailCount
FROM VehicleCheckItem
Where Passed = 0
GROUP BY VehicleCheckID) CheckItems
on CheckItems.VehicleCheckID = VehicleCheck.ID
其中包含车辆登记最近车辆检查的ID,VehicleReg,DriverName,TS和FailCount。
我如何在HQL中执行此操作? HQL是否支持连接中的子查询?
我得到了:
select vehicleCheck.ID, vehicleCheck.DriverName, vehicleCheck.VehicleReg, max(vehicleCheck.TS),
count(vehicleCheckItems.Passed)
from VehicleCheck vehicleCheck
join vehicleCheck.VehicleCheckItems vehicleCheckItmes
group by vehicleCheck.VehicleReg
这给了我几乎正确的结果,但是VehicleReg的组导致VehicleCheckItems的计数是每Reg而不是每次检查是否有意义。
谢谢!