Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

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

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

08.04.2015, 01:00. Просмотров 430. Ответов 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 + "))";
То она находится, с вложенным запросом - нет... Как сделать правильно запрос в данном случае?
Да, столбец, по которому выбираю максимум имеет строковый домен
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.04.2015, 01:00
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Некорректно выполняется запрос к SQLite (Программирование Android):

Как именно можно сделать SQLite запрос, если запрос уже сформирован? - Программирование Android
Здравствуйте. Помогите понять , как именно можно сделать SQLite запрос , если запрос уже сформирован Перечитал кучу информации но не могу...

SQLite запрос - Программирование Android
Здраствуйте, у мене есть таблица events... там есть поле action_date, в етом поле дата и время в секундах, я не знаю как мне написать...

SQLite запрос - Программирование Android
ищу минимальное значение в столбце и хочу вывести его в переменную . int nameColMill = cursor.getColumnIndex(&quot;val_two&quot;); ...

SQLite запрос - Программирование Android
Добрый день! Не могу разобраться как писать запросы SQL. Предположим, у меня есть таблица Events в базе SQLite (см. вложенную...

SQLite и древовидный запрос - Программирование Android
Привет! Создаю в SQLite browser древовидный запрос, вот его часть. select * from rubric where id in ( WITH tree (id) AS ( ...

SQLite запрос для списка с подчиненными - Программирование Android
Помогите пожалуста составить запрос (подзабыл азы SQLite - давно не работал). Скажите хотя-бы ВОЗМОЖНО ЛИ ПОДОБНОЕ? (что-бы время зря не...

7
fgtmenow
75 / 75 / 7
Регистрация: 29.03.2012
Сообщений: 254
08.04.2015, 01:07 #2
что это за...

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

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

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

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

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

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

т.е. в каждом городе, нашли максимальную цену по каждому товару.
1
contedevel
57 / 55 / 8
Регистрация: 07.10.2012
Сообщений: 598
08.04.2015, 01:35  [ТС] #7
Цитата Сообщение от fgtmenow Посмотреть сообщение
сложно как-то. попробую на примере
Спасибо, мне такой пример куда понятнее, чем документация SQLite
0
fgtmenow
75 / 75 / 7
Регистрация: 29.03.2012
Сообщений: 254
08.04.2015, 01:37 #8
да обращайся, если што
0
08.04.2015, 01:37
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.04.2015, 01:37
Привет! Вот еще темы с ответами:

Sqlite запрос со сравнением строки с последними 5ю символами - Программирование Android
Гуру SQLite, помогите! Есть таблица в которой одно из строковых полей выглядит так: 123454-80000 984230-80000 849037-80000 ...

Простейший запрос к SQLite (или схожу сума) - Программирование Android
Всех доблестных кодеров с праздником! Элегантных программных решений и выдающихся результатов всем!!! Путь код поддается и не...

ProgressBar, крутящийся, пока выполняется post-запрос - Программирование Android
обычный прогрессбар делать легко, но как сделать так чтобы прогрессбар крутился именно пока выполняется мой пост запрос, а при завершении...

Некорректно выполняется запрос на обновление данных - C#
sqlReqest = new FbCommand(&quot;update kp set status=0 where status=1&quot;, fbBD); try { ...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Опции темы

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