所以我有以下查詢:
//returns min max value my odomoter field must have
@Query("SELECT MAX(odometer) FROM MaintenanceRecord WHERE vehicleId = :maintenanceVehicleId AND "
"maintenanceTs < :dateAsLong")
Maybe<Float> getMinAllowedOdometer(long dateAsLong, int maintenanceVehicleId);
//returns the max value my odometer field is allowed to have
@Query("SELECT MIN(odometer) FROM MaintenanceRecord WHERE vehicleId = :maintenanceVehicleId AND "
"CAST(strftime('%s',DATE(maintenanceTs/1000,'unixepoch')) AS integer) > "
"CAST(strftime('%s',DATE(:dateAsLong/1000,'unixepoch')) AS integer)")
Maybe<Float> getMaxAllowedOdometer(long dateAsLong,int maintenanceVehicleId);
一個函式回傳該列必須具有的最小值,另一個查詢回傳該列允許具有odometer的最大值。odometer
問題是這兩個函式是在彼此之后執行的,因為我需要訂閱這兩個函式。老實說,這是不好的做法。
我可以將這兩個查詢放在一個查詢中并回傳Maybe<Float, Float>結果嗎?我的另一個解決方案是同步運行這些功能;而不是Maybe<Float>,我會直接回傳Float.
uj5u.com熱心網友回復:
您可以使用條件聚合在單個查詢中獲取兩列:
SELECT MAX(CASE WHEN maintenanceTs < :dateAsLong THEN odometer END) AS max_odometer,
MIN(CASE WHEN CAST(strftime('%s', DATE(maintenanceTs / 1000, 'unixepoch')) AS INTEGER) > CAST(strftime('%s', DATE(:dateAsLong / 1000,'unixepoch')) AS INTEGER) THEN odometer END) AS min_odometer
FROM MaintenanceRecord
WHERE vehicleId = :maintenanceVehicleId;
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/410118.html
標籤:
