我创建了一个应用程序,我想在其中执行查询以使用结束日期而不是使用开始日期和结束日期从表中获取值的总和。我想要执行的是将所有值相加给定日期到上一个日期。我创建的查询没有显示预期的输出,任何人都可以告诉我如何做到这一点。
表格结构:
//daybook label
String CREATE_DAYBOOK = "CREATE TABLE " + DAYBOOK_DETAILS + "("
+ DAYBOOK_ID + " INTEGER PRIMARY KEY,"
+ DAYBOOK_DATE + " TEXT,"
+ DAYBOOKUSER_TYPE + " TEXT,"
+ DAYBOOK_AMOUNT_IN + " NUMERIC,"
+ DAYBOOK_AMOUNT_OUT + " NUMERIC,"
+ DAYBOOK_EXTRA_AMOUNT + " NUMERIC,"
+ DAYBOOK_NAME + " TEXT,"
+ DAYBOOK_MOBILENO + " NUMERIC,"
+ DAYBOOK_DESCRIPTION + " TEXT,"
+ DAYBOOK_TYPE + " TEXT,"
+ DAYBOOK_TIME + " TEXT" + ");";
db.execSQL(CREATE_DAYBOOK);
查询:
SELECT IFNULL(SUM(otheramount),0) as amountin,IFNULL(SUM(amountout),0) as amountout FROM daybookdetails WHERE date < '" + changeddate + "' AND mobileno = '" + bfarmermobno + "' AND daybookdescription = '" + bno + "';
如果日期是15-12-2016,则表示应将此日期作为结束日期,并应将2016年11月1日至2016年12月15日的值相加。
答案 0 :(得分:0)
查看此方法的一种方法是使用存储过程来计算应用程序的业务代码。该过程可以处理结果并累加余额并输出结果集。存储过程的另一个好处是可以在不中断已编译的应用程序代码的情况下完成更新。当移动应用程序使用远程数据库时,这很有用,可以在远程数据库上更改/更新存储过程,而移动用户无需知道。
CREATE PROCEDURE `value_sums`(check_date datetime, mobileno varchar(45), daybookdescription varchar(45))
BEGIN
declare balance float;
Declare Loop_End Boolean Default 0;
declare myAmountin float;
declare myAmountout float;
declare myDescription text;
delcare mydate text;
declare Loop_Cursor CURSOR FOR
(SELECT date, IFNULL(SUM(otheramount),0) as amountin,IFNULL(SUM(amountout),0) as amountout
FROM daybookdetails WHERE date < check_date AND mobileno = mobileno AND
daybookdescription = daybookdescription);
DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET Loop_End=1;
open Loop_Cursor;
curloop: LOOP
FETCH Loop_Cursor into mydate, myAmountin, myAmountout, myDescription;
set balance = balance - myAmountout;
set balance = balance + myAmountin;
select mydate, mydescription, myAmountin, myamountout, balance;
UNTIL Loop_End END REPEAT;
CLOSE Loop_Cursor;
END
要调用该程序,请使用
call value_sums('2016-12-31','<mobile number>','<book_description>');