|
|
|
Получение минимальной даты в группировке запроса. | ☑ | ||
|---|---|---|---|---|
|
0
segun
02.03.09
✎
14:30
|
Народ подскажите пожалуйста, как можно получить минимальную дату из выборке по регистру сведений.
Вот небольшой запрос. |РаботыПоПроектуСрезПоследних.Статья КАК Статьи, |МАКСИМУМ(РаботыПоПроектуСрезПоследних.ДатаОкончания) КАК ДатаНачала |МИНИМУМ(РаботыПоПроектуСрезПоследних.ДатаНачала) КАК ДатаНачала | | ИЗ РегистрСведений.РаботыПоПроекту.СрезПоследних КАК |РаботыПоПроектуСрезПоследних | | СГРУППИРОВАТЬ ПО |РаботыПоПроектуСрезПоследних.Статья | |ИТОГИ | МАКСИМУМ(ДатаОкончания), | МИНИМУМ(ДатаНачала), |ПО | ОБЩИЕ, | Статьи ИЕРАРХИЯ" Проблема в том, что в для некоторых статей, ДатаНачала не указывается, и соответственно функции Минимум в выборку попадает значение 0, которое и является минимальным значением для группировки по иерархии. Т.о функция МИНИМУМ(РаботыПоПроектуСрезПоследних.ДатаНачала) в группировке по иерархии выдает 0. Можно ли, как то отфильтровать нули и, заставить функцию МИНИМУМ работать для всех значений кроме нулевых. |
|||
|
1
ТелепатБот
гуру
02.03.09
✎
14:30
|
||||
|
2
MoneG
02.03.09
✎
15:32
|
....
|МИНИМУМ( | ВЫБОР КОГДА РаботыПоПроектуСрезПоследних.ДатаНачала <> ДАТАВРЕМЯ(1,1,1) | ТОГДА РаботыПоПроектуСрезПоследних.ДатаНачала | ИНАЧЕ &ДатаСреза | КОНЕЦ | ) КАК ДатаНачала |ИЗ РегистрСведений.РаботыПоПроекту.СрезПоследних(&ДатаСреза,) КАК |РаботыПоПроектуСрезПоследних .... |
|||
|
3
segun
02.03.09
✎
17:09
|
Так не совсем то что нужно. Так минимальной датой может стать ДатаСреза. А нужно чтобы минимальная из не нулевых значений.
|
|||
|
4
73
02.03.09
✎
17:10
|
Попробуй
ИНАЧЕ NULL |
|||
|
5
НЕА123
02.03.09
✎
17:18
|
ГДЕ РаботыПоПроектуСрезПоследних.ДатаНачала <> ДАТАВРЕМЯ(1,1,1)
? |
|||
|
6
Defender aka LINN
02.03.09
✎
17:19
|
(3) А если все пустые?
|
|||
|
7
Aprobator
02.03.09
✎
17:20
|
(0) изначально надо определиться, а что вообще с нулевыми значениями делать?
|
|||
|
8
segun
02.03.09
✎
17:55
|
Да их хотелось бы просто игнорировать.
Например. В регистре РаботыПоПроекту в срезе последних 3 записи: Статья ВремяНачала ВремяОкончания Монтаж конструкции 01.05.2009 Монтаж двигателя 01.04.2009 10.04.2009 Монтаж газоотвода 15.04.2009 20.04.2009 Все эти статьи находятся в группе Монтаж. Хотелось бы получить следующую выборку Статья ВремяНачала ВремяОкончания Монтаж 01.04.2009 01.05.2009 Монтаж конструкции 01.05.2009 Монтаж двигателя 01.04.2009 10.04.2009 Монтаж газоотвода 15.04.2009 20.04.2009 |
|||
|
9
73
02.03.09
✎
17:58
|
(8) ИНАЧЕ NULL пробовал?
|
|||
|
10
73
02.03.09
✎
17:58
|
(9)+
|МИНИМУМ( | ВЫБОР КОГДА РаботыПоПроектуСрезПоследних.ДатаНачала <> ДАТАВРЕМЯ(1,1,1) | ТОГДА РаботыПоПроектуСрезПоследних.ДатаНачала | ИНАЧЕ NULL | КОНЕЦ | ) КАК ДатаНачала |
|||
|
11
szhukov
02.03.09
✎
18:02
|
(10) Если верить стандарту SQL то в вашем случае получите минимум = Null (если в выборке будет хотя бы одна нулевая дата)
|
|||
|
12
Defender aka LINN
02.03.09
✎
18:03
|
Вместо &ДатаНачала можно использовать поле. |
|||
|
13
73
02.03.09
✎
18:03
|
(11) - проверяли в 1С?
|
|||
|
14
szhukov
02.03.09
✎
18:04
|
(13) нет
Я же написал за SQL Вполне возможно у 1С свой стандарт :) |
|||
|
15
73
02.03.09
✎
18:07
|
Если автор уверен, что не может быть все незаполненными, то
можно попробовать: ИНАЧЕ ДатаВремя(3999,12,31) |
|||
|
16
segun
02.03.09
✎
18:12
|
| МИНИМУМ(
| ВЫБОР КОГДА РаботыПоПроектуСрезПоследних.ДатаНачала <> ДАТАВРЕМЯ(1,1,1) | ТОГДА Звезда_РаботыПоПроектуСрезПоследних.ДатаНачала | ИНАЧЕ ЕСТЬ NULL | КОНЕЦ | ) КАК ДатаНачала, Такая конструкция работает так же как РаботыПоПроектуСрезПоследних.ДатаНачала. Монтаж Время начало NULL |
|||
|
17
Defender aka LINN
02.03.09
✎
18:14
|
(16) Я, ять, для кого (12) написал?
|
|||
|
18
Новичок
02.03.09
✎
18:16
|
(11)Согласно стандарта SQL:
"The aggregate COUNT(*) counts all NULL and non-NULL tuples; COUNT(attribute) counts all tuples whose attribute value is not NULL. Other SQL aggregate functions ignore NULL values in their computation." |
|||
|
19
segun
02.03.09
✎
18:17
|
На Defender aka LINN 17. У тебя фактически пустая дата просто подменяется датой среза. Мне же нужно получить минимальную из не нулевых дат.
|
|||
|
20
73
02.03.09
✎
18:18
|
(16) И как он с ЕСТЬ еще работает?
|
|||
|
21
73
02.03.09
✎
18:18
|
А (15) ?
|
|||
|
22
Fragster
гуру
02.03.09
✎
18:19
|
а нафуя в (0) итоги?
|
|||
|
23
Aprobator
02.03.09
✎
18:20
|
хм - сделай пустую дату максимальной (типа ДАТАВРЕМЯ(9999,12,31)) и она будет браться в самый последний момент. Ну там при выводе соответствующий контроль и все.
|
|||
|
24
73
02.03.09
✎
18:20
|
(23) см (15) там максимум.
|
|||
|
25
73
02.03.09
✎
18:21
|
(24)+ в смысле год максимальный 3999
|
|||
|
26
Aprobator
02.03.09
✎
18:22
|
(24) (15) не увидел. Надеюсь я не нарушил авторское право :)
|
|||
|
27
Defender aka LINN
02.03.09
✎
18:22
|
(19) Оставь свои фантазии для другого места.
|
|||
|
28
73
02.03.09
✎
18:24
|
(26) наздоровье:)
|
|||
|
29
segun
02.03.09
✎
18:25
|
Как вариант конечно идея хорошая. Но если в регистре сведений в какой кто из групп статей все начальные даты нулевые. Тогда минимальная дата получается ДАТАВРЕМЯ(9999,12,31), что не корректно. Конечно можно делать проверку при выводе, такой запрос уже не засунешь в универсальный отчет. А хотелось бы чтобы вся логика осталась на уровне запроса.
|
|||
|
30
PR
02.03.09
✎
18:27
|
(29) Какая-то фигня.
Ты определись сам-то, что у тебя ДОЛЖНО БЫТЬ в ситуации, когда 1. Записей нет вообще 2. Все даты пустые |
|||
|
31
Aprobator
02.03.09
✎
18:28
|
(30) а конечная дата может быть пустой? как второй вариант Если дата начала пуста, принимать ее равной дате окончания.
|
|||
|
32
Aprobator
02.03.09
✎
18:29
|
или еще варинат получить минимальные даты в другом запросе при условии, что пустые даты в сад, дальше левое соединение, ну и по ситуации.
|
|||
|
33
НЕА123
02.03.09
✎
18:32
|
биля...
в (12) же решение МИНИМУМ(ВЫБОР КОГДА ДатаНачала = &ПустаяДата ТОГДА "" ИНАЧЕ ДатаНачала КОНЕЦ) КАК ДатаНачала |
|||
|
34
НЕА123
02.03.09
✎
18:33
|
строка больше даты. всегда.
|
|||
|
35
PR
02.03.09
✎
18:34
|
(33) Почему не NULL?
|
|||
|
36
Aprobator
02.03.09
✎
18:34
|
(34) вот этого не знал. Надо будет проверить и взять на вооружение.
|
|||
|
37
НЕА123
02.03.09
✎
18:35
|
(35) он меньше всех.
|
|||
|
38
PR
02.03.09
✎
18:36
|
(37) А NULL в МИНИМУМ попадают?
|
|||
|
39
НЕА123
02.03.09
✎
18:38
|
(38) точно не знаю.
но по сабжу это без разницы. |
|||
|
40
73
02.03.09
✎
18:39
|
(37) У меня такой запрос
выбрать ДатаВремя(3999,12,31) как поле ОбЪединить выбрать ДатаВремя(2000,1,2) ОбЪединить выбрать null упорядочить по поле Ставит Null на максимум. Проверял. Может не всегда, не знаю. Но если NUll и меньше всех, то не всегда. |
|||
|
41
segun
02.03.09
✎
18:46
|
НЕА123
33 - 02.03.09 - 18:32 Чувак П..ц ты гений. Все работает.. УРААА! |
|||
|
42
Новичок
02.03.09
✎
18:51
|
(34)
Правила сравнения значений Поскольку в языке запросов могут сравниваться значения разных типов, определены правила, по которым выполняется сравнение двух значений. Данные правила используются для: сравнения значений в операторах сравнения; определения максимального и минимального значений в агрегатных функциях МИНИМУМ и МАКСИМУМ; упорядочивания записей результата запроса в соответствии с порядком, заданным в предложении УПОРЯДОЧИТЬ ПО. Если типы значений отличаются друг от друга, то отношения между значениями определяются на основании приоритета типов: тип NULL (самый низший); тип Булево; тип Число; тип Дата; тип Строка; ссылочные типы. Отношения между различными ссылочными типами определяются на основе внутренних ссылочных номеров таблиц, соответствующих тому или иному типу. |
|||
|
43
segun
02.03.09
✎
19:02
|
Народ всем огромное спасибо.
|
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |