Форум программистов, компьютерный форум CyberForum.ru

Программирование Android

Войти
Регистрация
Восстановить пароль
 
contedevel
57 / 55 / 8
Регистрация: 07.10.2012
Сообщений: 596
#1

Некорректно выполняется запрос к SQLite - Программирование Android

08.04.2015, 01:00. Просмотров 354. Ответов 7
Метки нет (Все метки)

Здравствуйте!
Необходимо сделать выборку данных из БД по двум условиям + еще максимум по третьему столбцу:
Кликните здесь для просмотра всего текста
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
public List<Table.Lesson> findLessonsMaxTime(int dayCode, int week) {
        List<Table.Lesson> lessons = new ArrayList<Table.Lesson>();
        SQLiteDatabase db = this.getReadableDatabase();
 
        String selection = Table.Lesson.KEY_DAY + " = ? AND " +
                Table.Lesson.KEY_WEEK_NUMBER + " = ? AND " +
                Table.Lesson.KEY_START_END + " = (SELECT MAX(" +
                Table.Lesson.KEY_START_END + "))";
 
        String[] selectionArgs = new String[] {String.valueOf(dayCode), String.valueOf(week)};
 
        Cursor cursor = db.query(Table.Lesson.TABLE_NAME, null, selection, selectionArgs,
                null, null, null, null);
 
        if(cursor.moveToFirst()) {
            do {
                Table.Lesson item = convertToLesson(cursor);
                lessons.add(item);
            } while(cursor.moveToNext());
        }
 
        cursor.close();
        db.close();
 
        lessons = sort(lessons);
        return lessons;
    }


В БД на имеется 1 запись и если не дописывать
Java
1
2
3
"AND " +
                Table.Lesson.KEY_START_END + " = (SELECT MAX(" +
                Table.Lesson.KEY_START_END + "))";
То она находится, с вложенным запросом - нет... Как сделать правильно запрос в данном случае?
Да, столбец, по которому выбираю максимум имеет строковый домен
Лучшие ответы (1)
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
fgtmenow
75 / 75 / 7
Регистрация: 29.03.2012
Сообщений: 254
08.04.2015, 01:07     Некорректно выполняется запрос к SQLite #2
что это за...

приложи полный код запроса к бд (текст селекта). помоему ты написал полную ахинею
contedevel
57 / 55 / 8
Регистрация: 07.10.2012
Сообщений: 596
08.04.2015, 01:11  [ТС]     Некорректно выполняется запрос к SQLite #3
Цитата Сообщение от fgtmenow Посмотреть сообщение
приложи полный код запроса к бд (текст селекта). помоему ты написал полную ахинею
Это и есть полный код...
Ну, если просто строкой, то как-то так:
SQL
1
SELECT * FROM MyTable WHERE column1 = value1 AND column2 = value2 AND column3 = (SELECT MAX( column3 ));
Я не спорю, что ахинея, не знаю, как правильно...
То есть мне надо чтобы нашлись результаты, совпадающие по условиям, а затем из низ выбрался максимум, если такое можно сделать...
fgtmenow
75 / 75 / 7
Регистрация: 29.03.2012
Сообщений: 254
08.04.2015, 01:15     Некорректно выполняется запрос к SQLite #4
Сообщение было отмечено автором темы, экспертом или модератором как ответ
SQL
1
2
3
4
SELECT column1, column2, MAX( column3 ) 
FROM MyTable 
WHERE column1 = value1 AND column2 = value2
GROUP BY column1, column2
contedevel
57 / 55 / 8
Регистрация: 07.10.2012
Сообщений: 596
08.04.2015, 01:18  [ТС]     Некорректно выполняется запрос к SQLite #5
fgtmenow, То есть придется перечислять все столбцы, которые должны быть в выборке, просто их много в бд?
И можете объяснить, пожалуйста, что сделает GROUP BY, он обязателен?
fgtmenow
75 / 75 / 7
Регистрация: 29.03.2012
Сообщений: 254
08.04.2015, 01:25     Некорректно выполняется запрос к SQLite #6
ну конечно по-хорошему тебе в гугл с такими вопросами..

это группировка, когда ты используешь групповые функции типа max рядом с обычными полями, то необходимо перечислить все столбцы, по которым будет проходить группировка. Если тебе достаточно только 3 колонки, то убирай все остальное и группировку тоже, она грубо говоря нужна только для предоставления тебе верных данных... сложно как-то. попробую на примере

есть 5 записей:

молоко Кимры 20р
сыр Кимры 33р
молоко Тверь 35р
молоко Тверь 40р
сыр Кимры 20р

выполнив селект, ища максимальную цену и показав например 1, 2 3 колонку, т.е. select column 1, column 2, max(column3) from ....
получим

молоко Кимры 20р
молоко Тверь 40р
сыр Кимры 33р

т.е. в каждом городе, нашли максимальную цену по каждому товару.
contedevel
57 / 55 / 8
Регистрация: 07.10.2012
Сообщений: 596
08.04.2015, 01:35  [ТС]     Некорректно выполняется запрос к SQLite #7
Цитата Сообщение от fgtmenow Посмотреть сообщение
сложно как-то. попробую на примере
Спасибо, мне такой пример куда понятнее, чем документация SQLite
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.04.2015, 01:37     Некорректно выполняется запрос к SQLite
Еще ссылки по теме:
Простейший запрос к SQLite (или схожу сума) Android
ProgressBar, крутящийся, пока выполняется post-запрос Android
Android SQLite
Android SQLite
SQLite Android

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
fgtmenow
75 / 75 / 7
Регистрация: 29.03.2012
Сообщений: 254
08.04.2015, 01:37     Некорректно выполняется запрос к SQLite #8
да обращайся, если што
Yandex
Объявления
08.04.2015, 01:37     Некорректно выполняется запрос к SQLite
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru