Имя: Пароль:
1C
1C 7.7
v7: Sqlite Почему Select max() where= возвращает строку?
0 Aleksey
 
27.04.12
02:29
Не могу понять почему запрос
Запрос.ВыполнитьЗапрос("Select max(id) from Журнал Where Код='"+ИмяФайла+"'") возвращает 1 строку при пустом журнале?
Т.е. данных нет ни то что с таким кодом а вообще нет, т.е.

Запрос.ВыполнитьЗапрос("Select id from Журнал Where Код='"+ИмяФайла+"'") возвращает 0 строк
1 Aleksey
 
27.04.12
02:30
Собственно нужно просто получить последний id с таким кодом получается нужно через order и limit это делать?
2 Рэйв
 
27.04.12
02:36
Он правильно возвращает и логично.
Это NULL
:)
3 Aleksey
 
27.04.12
02:41
(2) Ну так обычный же запрос без max Null не возвращает же
4 Aleksey
 
27.04.12
02:41
пока поменял запрос на ("Select Статус from Журнал Where Код='"+ИмяФайла+"' order by id limit 1")
5 Рэйв
 
27.04.12
02:45
Select max(id)

я вообще удивляюсь.
Группировочная функция есть.А Группируемых полей нет..Это так положено?.
6 Aleksey
 
27.04.12
02:48
(5) А какие поля писать, если нужно тупо максимальный ID по определенному коду GROUP BY Код?
7 Рэйв
 
27.04.12
02:50
ну Код и писать.
Это я вообщето п скульному думаю.
Может там у вас по  эс плюс другя логикак, не знаю
8 Рэйв
 
27.04.12
02:50
не пользовался
9 Aleksey
 
27.04.12
02:51
(7) А причем ту 1Срр если речь о Sqlite
10 Рэйв
 
27.04.12
02:53
(9)Тоже не пользовался, но точно знаю - Если ты одному полю задаешь MAX, то хоть одно(Не его) нужно включить в GROUP
11 Рэйв
 
27.04.12
02:54
даже не "то хоть одно", а все
12 Aleksey
 
27.04.12
02:58
Добавил GROUP BY стал возвращать 0 строк как и ожидается.
13 spock
 
27.04.12
07:08
(10)Это какой-то скуль из альтернативной реальности?

"Если ты одному полю задаешь MAX, то хоть одно(Не его) нужно включить в GROUP
" - если используется GROUP, то MAX будет в пределах значения этой группировки. Дальше объяснять?
14 orefkov
 
27.04.12
08:42
(10)
Это не так.
Если ни одно поле не включено, значит свернет по всем.
(0)
Все правильно возвращает. Ты просишь максимальное значение - пожаста, тебе выдает NULL.
15 orefkov
 
27.04.12
08:44
(1)
И таки да, кошернее это делать через order by ... desc limit 1
Так точно можно быть уверенным, что "оптимизатор" не запутается.
16 orefkov
 
27.04.12
08:52
(4)
Не понял - так у тебя не max, а min вернет.
Надо order by id desc
Ну и понятно, что должен быть индекс (Код,id)
17 Aleksey
 
27.04.12
10:15
(16) С Desc согласен
А для индексов есть конструкция вида CREATE INDEX IF NOT EXISTS
Пользователь не знает, чего он хочет, пока не увидит то, что он получил. Эдвард Йодан