Запрос для выбора суммы столбца между двумя датами, для которых выполняется некоторое условие

        ResultSet rs1 = state.executeQuery("select sum(bill_total) as bill_total"
                      + " from t_report where date between ? and ? AND  mode_of_payment='Cash' ");
        PreparedStatement pst1 = conn.prepareStatement(sql);
        pst1.setString(1, date1.getText());
        pst1.setString(2, date2.getText());
        while(rs1.next()){
        cash_label.setText(rs1.getString("bill_total"));
        }

Я пробовал этот запрос, но он не работает. Получаю ошибку: неправильный синтаксис рядом’?’
Из двух условий работает только условие способа оплаты, а условие даты не работает.

4 ответа

  1. попробуйте этот запрос:

    SELECT SUM(bill_total) AS bill_total FROM t_report WHERE (date BETWEEN to_date('01/01/2015','dd/mm/yyyy') and to_date('01/01/2017','dd/mm/yyyy') ) AND  (mode_of_payment='Cash')
  2. Я пробовал что-то вроде этого
    Вот структура моей базы данных

    CREATE TABLE bill_total2(bill_total integer,mode_of_payment string,date1 datetime);
    
    /* Create few records in this table */
    INSERT INTO bill_total2 VALUES(1,'cash','12-12-2016 00:00:00');
    INSERT INTO bill_total2 VALUES(2,'cash','12-12-2016 00:00:00');
    INSERT INTO bill_total2 VALUES(3,'cash','12-12-2016 00:00:00');
    INSERT INTO bill_total2 VALUES(4,'cash','12-12-2016 00:00:00');
    INSERT INTO bill_total2 VALUES(5,'cash','12-12-2016 00:00:00');
    

    и мой запрос

    SELECT sum(bill_total) FROM bill_total2 
    WHERE date1 BETWEEN '12-12-2016 00:00:00' AND '12-12-2016 00:00:00'
    AND mode_of_payment='cash';
    

    это работает хорошо для меня.

  3. Вы выполняете запрос перед установкой параметров! Пожалуйста, попробуйте это:

    String sql = "select sum(bill_total) as bill_total"
              + " from t_report where date between ? and ? AND  mode_of_payment='Cash' ");
    PreparedStatement pst1 = conn.prepareStatement(sql);
    pst1.setString(1, date1.getText());
    pst1.setString(2, date2.getText());
    ResultSet rs1 = pst1.executeQuery();
    while(rs1.next()){
        cash_label.setText(rs1.getString("bill_total"));
    }