2016-12-27 1 views
0

Ich habe eine Anwendung erstellt, in der ich eine Abfrage ausführen möchte, um die Summe der Werte aus einer Tabelle mit dem Enddatum statt Startdatum und Enddatum zu erhalten .was ich ausführen möchte, ist es, alle Werte vom angegebenen Datum bis zum vorherigen Datum zu summieren. Die Abfrage, die ich erstellt habe, zeigt nicht die erwartete Ausgabe, kann mir jemand sagen, wie ich es tun kann.So berechnen Sie die Summe der Werte in Sql mit nur Enddatum

Tabellenstruktur:

//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); 

Abfrage:

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

Wenn das Datum 15-12-2016 ist, bedeutet, dann sollte es dieses Datum als Enddatum nehmen und sollte die Werte vom 01-11-2016 bis 15-12-2016 summieren.

+0

So das Enddatum 2016.12.12 ist verwenden zu nennen, aber es sollte noch die Werte aus 15-12-2016 zusammenfassen? Das ist komisch, ich verstehe es nicht. Oder ist 15-12-2016 exklusiv? –

+0

@Rolf ツ das Enddatum ist 15-12-2016 von diesem Datum sollte Summe der Werte bis zum 01-11-2016 –

+0

"Von diesem Datum", das ist total unklar. Normalerweise definierst du einen Bereich wie in 10 bis 20 oder Januar bis Dezember, nicht Dezember bis November, ist das wirklich was du willst? –

Antwort

0

Eine Methode, dies zu betrachten, besteht darin, eine gespeicherte Prozedur zu verwenden, um den Geschäftscode Ihrer Anwendung zu berechnen. Die Prozedur kann die Ergebnisse verarbeiten und die Salden aufaddieren und eine Ergebnismenge ausgeben. Ein weiterer Vorteil einer gespeicherten Prozedur besteht darin, dass Aktualisierungen durchgeführt werden können, ohne den kompilierten Anwendungscode zu unterbrechen. Dies ist nützlich, wenn eine mobile Anwendung eine entfernte Datenbank verwendet, die gespeicherte Prozedur kann in der entfernten Datenbank geändert/aktualisiert werden, ohne dass die mobilen Benutzer dies jemals wissen.

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 

Um das Verfahren

call value_sums('2016-12-31','<mobile number>','<book_description>'); 
Verwandte Themen