Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/55.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android-kotlin中MySql查询到SQL房间查询的转换_Android_Mysql_Sql_Sqlite_Android Room - Fatal编程技术网

Android-kotlin中MySql查询到SQL房间查询的转换

Android-kotlin中MySql查询到SQL房间查询的转换,android,mysql,sql,sqlite,android-room,Android,Mysql,Sql,Sqlite,Android Room,我刚从后端得到下面的mysql查询。 我必须使用Android中的Room数据库在本地管理这些东西 因此,后端查询如下: Select DATE_FORMAT(timeStamp ,'%d-%b') AS date, DATE_FORMAT(timeStamp ,'%d') AS dateNumber, ROUND(AVG(IF(stateOfCharge IS NULL, 0, stateOfCharge)), 2) AS chargeOverTime, ROUND(AVG(IF(temp

我刚从后端得到下面的mysql查询。 我必须使用Android中的Room数据库在本地管理这些东西

因此,后端查询如下:

Select DATE_FORMAT(timeStamp ,'%d-%b') AS date, DATE_FORMAT(timeStamp ,'%d') AS dateNumber, 
ROUND(AVG(IF(stateOfCharge IS NULL, 0, stateOfCharge)), 2) AS chargeOverTime, 
ROUND(AVG(IF(temperature IS NULL, 0, temperature)), 2) AS temperature, 
ROUND(AVG(IF(current IS NULL, 0, current)), 2) AS averageChargeDischarge 
from batteryDetails 
where name="VERNE000003"
and timeStamp between "2021-03-11 11:40:29" AND "2021-03-12 23:40:29"
Group by DATE_FORMAT(timeStamp ,"%Y-%m-%d") ORDER BY timeStamp;
@Query("SELECT datetime(timeStamp ,'%d-%b') AS date, " +
        "datetime(timeStamp ,'%d') AS dateNumber, " +
        "ROUND(AVG(if(stateOfCharge IS NULL, 0, stateOfCharge)), 2) AS chargeOverTime, " +
        "ROUND(AVG(if(temperature IS NULL, 0, temperature)), 2) AS temperature, " +
        "ROUND(AVG(if(current IS NULL, 0, current)), 2) AS averageChargeDischarge " +
        "FROM " + DatabaseConstant.mUserBatteryDetailsTable +
        " WHERE name= :batteryId and timeStamp between :startDate AND :endDate " +
        "GROUP BY datetime(timeStamp ,'%Y-%m-%d') ORDER BY timeStamp")
suspend fun getHistoryData(batteryId: String, startDate: String, endDate: String): List<BatteryDetails>?
 @Query("Select strftime('%d %m',datetime(timeStamp, 'unixepoch')) as dates, " +
        "strftime('%d', datetime(timeStamp, 'unixepoch')) as dateNumber, " +
        "round(avg(coalesce( stateOfCharge,0))) as chargeOverTime, " +
        "ROUND(AVG(coalesce( avgTemperature,0))) as avgTemperature, " +
        "ROUND(AVG(coalesce(current,0))) as averageChargeDischarge " +
        "FROM " + DatabaseConstant.mUserBatteryDetailsTable +
        " WHERE name= :batteryId and timeStamp between :startDate AND :endDate " +
        "Group by datetime(timeStamp ,'%Y-%m-%d') ORDER BY timeStamp")
我已尝试按以下方式购买:

Select DATE_FORMAT(timeStamp ,'%d-%b') AS date, DATE_FORMAT(timeStamp ,'%d') AS dateNumber, 
ROUND(AVG(IF(stateOfCharge IS NULL, 0, stateOfCharge)), 2) AS chargeOverTime, 
ROUND(AVG(IF(temperature IS NULL, 0, temperature)), 2) AS temperature, 
ROUND(AVG(IF(current IS NULL, 0, current)), 2) AS averageChargeDischarge 
from batteryDetails 
where name="VERNE000003"
and timeStamp between "2021-03-11 11:40:29" AND "2021-03-12 23:40:29"
Group by DATE_FORMAT(timeStamp ,"%Y-%m-%d") ORDER BY timeStamp;
@Query("SELECT datetime(timeStamp ,'%d-%b') AS date, " +
        "datetime(timeStamp ,'%d') AS dateNumber, " +
        "ROUND(AVG(if(stateOfCharge IS NULL, 0, stateOfCharge)), 2) AS chargeOverTime, " +
        "ROUND(AVG(if(temperature IS NULL, 0, temperature)), 2) AS temperature, " +
        "ROUND(AVG(if(current IS NULL, 0, current)), 2) AS averageChargeDischarge " +
        "FROM " + DatabaseConstant.mUserBatteryDetailsTable +
        " WHERE name= :batteryId and timeStamp between :startDate AND :endDate " +
        "GROUP BY datetime(timeStamp ,'%Y-%m-%d') ORDER BY timeStamp")
suspend fun getHistoryData(batteryId: String, startDate: String, endDate: String): List<BatteryDetails>?
 @Query("Select strftime('%d %m',datetime(timeStamp, 'unixepoch')) as dates, " +
        "strftime('%d', datetime(timeStamp, 'unixepoch')) as dateNumber, " +
        "round(avg(coalesce( stateOfCharge,0))) as chargeOverTime, " +
        "ROUND(AVG(coalesce( avgTemperature,0))) as avgTemperature, " +
        "ROUND(AVG(coalesce(current,0))) as averageChargeDischarge " +
        "FROM " + DatabaseConstant.mUserBatteryDetailsTable +
        " WHERE name= :batteryId and timeStamp between :startDate AND :endDate " +
        "Group by datetime(timeStamp ,'%Y-%m-%d') ORDER BY timeStamp")
@Query(“选择日期时间(时间戳,%d-%b”)作为日期,”+
datetime(时间戳“%d”)作为日期编号+
四舍五入(平均值(如果(充电状态为空,0,充电状态)),2)作为充电超时+
四舍五入(平均值(如果(温度为零,0,温度)),2)作为温度+
“四舍五入(平均值(如果(电流为零,0,电流)),2)作为平均电荷放电”+
“FROM”+DatabaseConstant.muserbatterydailstable+
“其中name=:batteryId和时间戳介于:startDate和:endDate之间”+
“按日期时间分组(时间戳,%Y-%m-%d')按时间戳排序”)
suspend fun getHistoryData(batteryId:String,startDate:String,endDate:String):列表?
但下面是一个错误:

错误:查询有问题:[SQLITE_error]SQL错误或 缺少数据库(没有这样的函数:if) 公共抽象java.lang.Object getHistoryData(@org.jetbrains.annotations.NotNull()


查询结果如下:

Select DATE_FORMAT(timeStamp ,'%d-%b') AS date, DATE_FORMAT(timeStamp ,'%d') AS dateNumber, 
ROUND(AVG(IF(stateOfCharge IS NULL, 0, stateOfCharge)), 2) AS chargeOverTime, 
ROUND(AVG(IF(temperature IS NULL, 0, temperature)), 2) AS temperature, 
ROUND(AVG(IF(current IS NULL, 0, current)), 2) AS averageChargeDischarge 
from batteryDetails 
where name="VERNE000003"
and timeStamp between "2021-03-11 11:40:29" AND "2021-03-12 23:40:29"
Group by DATE_FORMAT(timeStamp ,"%Y-%m-%d") ORDER BY timeStamp;
@Query("SELECT datetime(timeStamp ,'%d-%b') AS date, " +
        "datetime(timeStamp ,'%d') AS dateNumber, " +
        "ROUND(AVG(if(stateOfCharge IS NULL, 0, stateOfCharge)), 2) AS chargeOverTime, " +
        "ROUND(AVG(if(temperature IS NULL, 0, temperature)), 2) AS temperature, " +
        "ROUND(AVG(if(current IS NULL, 0, current)), 2) AS averageChargeDischarge " +
        "FROM " + DatabaseConstant.mUserBatteryDetailsTable +
        " WHERE name= :batteryId and timeStamp between :startDate AND :endDate " +
        "GROUP BY datetime(timeStamp ,'%Y-%m-%d') ORDER BY timeStamp")
suspend fun getHistoryData(batteryId: String, startDate: String, endDate: String): List<BatteryDetails>?
 @Query("Select strftime('%d %m',datetime(timeStamp, 'unixepoch')) as dates, " +
        "strftime('%d', datetime(timeStamp, 'unixepoch')) as dateNumber, " +
        "round(avg(coalesce( stateOfCharge,0))) as chargeOverTime, " +
        "ROUND(AVG(coalesce( avgTemperature,0))) as avgTemperature, " +
        "ROUND(AVG(coalesce(current,0))) as averageChargeDischarge " +
        "FROM " + DatabaseConstant.mUserBatteryDetailsTable +
        " WHERE name= :batteryId and timeStamp between :startDate AND :endDate " +
        "Group by datetime(timeStamp ,'%Y-%m-%d') ORDER BY timeStamp")

用大小写替换IF()。@Akina谢谢mam,现在得到:“SQL错误或缺少数据库(近”)”:语法错误)“请。指南。
如果(A,B,C)
=>
当A然后B其他C结束时的情况
。但是在您的情况下,
IF(column为NULL,0,column)
可以替换为
COALESCE(column,0)
。在任何数据库(Access除外)中,
IF(stateOfCharge为NULL,0,stateOfCharge)
的等价物是
COALESCE(stateOfCharge,0)