Получение массива таблиц, классифицированных и накопленных - PullRequest
0 голосов
/ 16 апреля 2019

У меня есть таблица, в которой хранится свежая информация об отделе и счетах.Моя цель - найти последние семь дней с сегодняшней даты, классифицировать их по Департаменту, сложить цену и вернуть в виде массива.

mysql> select * from Item;
+----+------------+--------------+
| ID | Department | Price | Date
+----+------------+--------------+
|  1 | DELL       | 20    | 04/01/2019
|  2 | HP         | 15    | 04/16/2019
|  3 | DELL       | 30    | 03/15/2019
|  4 | ACER       | 15    | 04/16/2019
|  5 | ASUS       | 60    | 04/15/2019
|  6 | HP         | 15    | 04/14/2019
|  7 | DELL       | 30    | 03/30/2019
|  8 | ACER       | 15    | 01/16/2019
|  9 | ASUS       | 60    | 02/15/2019
+----+------------+----------+

Пока что я упорядочил таблицу по дате:

Cursor cursor = db.rawQuery("SELECT * FROM " + Projects_TABLE + " ORDER BY " + PRO_DATE + " DES", null);

и сравнил сегодняшнюю дату минус 7 дней, хранящихся в таблице, но я не знаю, как вернуть всеДепартамент согласия в течение семи дней с добавленной ценой, например, хотел результаты массива:

Today Date is 04/16/2019
+----+------------+----------+
| ID | Department | Price 
+----+------------+----------+
|  1 | HP         | 30 
|  2 | ACER       | 15
+----+------------+----------+

Вот мой код

 public  ArrayList<DetailedProject_GS> DB_Display_The_Progress_Weakly() {
        SQLiteDatabase sqLiteDatabase = this.getWritableDatabase ();
        Cursor cursor = db.rawQuery("SELECT * FROM " + Projects_TABLE + " ORDER BY " + PRO_DATE + " DES", null);
        ArrayList<DetailedProject_GS> ProjectsArchive = new ArrayList<>();
        Calendar EndTime = Calendar.getInstance();
        cursor.moveToFirst ();
        while (cursor != null && cursor.getCount () > 0 && !cursor.isAfterLast ()) {
            try {
                SimpleDateFormat simpleDateFormat = new 
 SimpleDateFormat("EEEE dd/MM/yyyy" , Locale.ENGLISH);

                String currentDateandTime = simpleDateFormat.format(new Date());
                Calendar c = Calendar.getInstance();
                c.setTime(simpleDateFormat.parse(currentDateandTime));
                c.add(Calendar.DATE, -7);

                EndTime.setTime(sdf.parse(cursor.getString (cursor.getColumnIndex (PROJECT_H_ENDTIME)) ));// all done
                if (EndTime.after(c)){

                    //Adding CODE HERE
                    ProjectsArchive.add(data);
                }else{

                }
            } catch (ParseException e) {
                e.printStackTrace();
            }
            cursor.moveToNext ();
        }
        cursor.close();
        sqLiteDatabase.close ();
        return ProjectsArchive;
    }

1 Ответ

0 голосов
/ 16 апреля 2019

Если вы измените формат дат на YYYY-MM-DD, то все, что вам нужно, это group by department:

select 
  department, 
  sum(price) price 
from item
where date >= datetime('now', '-7 day')
group by department

При текущем формате дат сначала необходимо преобразовать его в YYYY-MM-DD:

select 
  department, 
  sum(price) price 
from item
where substr(date, 7) || '-' || substr(date, 1, 2) || '-' || substr(date, 4, 2) >= datetime('now', '-7 day')
group by department
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...