#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
классифицирует строки по подразделениям, а сумма (цена) добавляет все значения в столбец цена.