Получение массива таблиц, классифицированных и кумулированных

#android #arrays #sqlite #android-sqlite

#Android #массивы #sqlite #android-sqlite

Вопрос:

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

 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 amp;amp; cursor.getCount () > 0 amp;amp; !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. Что это за MySQL или SQLite?

2. База данных SQLiteDatabase.

3. Затем измените формат дат на ГГГГ-ММ-ДД, чтобы они были сопоставимы. SQLite не настолько гибок с датами.

4. как мне вернуть массив, классифицированный и кумулированный

Ответ №1:

Если вы измените формат дат на 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
 

Комментарии:

1. Я добавил код, который я написал до сих пор, сравнение дат возвращает любую строку, которая находится между 7 днями, проблема здесь в том, что она возвращает их все как отдельные строки, я хочу, чтобы они были классифицированы и суммированы. тем не менее, я понимаю, что вы имеете в виду под базой данных SQL, я исправлю это следующим.

2. group by department классифицирует строки по подразделениям, а сумма (цена) добавляет все значения в столбец цена.