如何仅使用结束日期计算sql中的值的总和

时间:2016-12-27 11:04:25

标签: android sql sqlite

我创建了一个应用程序,我想在其中执行查询以使用结束日期而不是使用开始日期和结束日期从表中获取值的总和。我想要执行的是将所有值相加给定日期到上一个日期。我创建的查询没有显示预期的输出,任何人都可以告诉我如何做到这一点。

表格结构:

  //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 + "';

image

如果日期是15-12-2016,则表示应将此日期作为结束日期,并应将2016年11月1日至2016年12月15日的值相加。

1 个答案:

答案 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>');