![]() |
![]() |
![]() |
|
Коллеги, подсобите в запросе. Хромаю пока... | ☑ | ||
---|---|---|---|---|
0
Обработка
29.11.13
✎
10:01
|
Есть РС Измерение - "ТранспортноеСредство" - Спр-к
Ресурс - "ДатаЗаменыМасла" - Дата Нужно запросом вытащить по каждому ТС (Транспортное Средство) за период "дату первой" ближайшей замены к дату начала и "дату последней "замены ближайший к концу периода. Вначале был такой запрос: ВЫБРАТЬ ДатыЗаменМаселСрезПервых.ТС, ДатыЗаменМаселСрезПервых.ДатаЗамены КАК ДатаЗаменыПервое, ДатыЗаменМаселСрезПоследних.ДатаЗамены КАК ДатаЗаменыКонечное ИЗ РегистрСведений.ДатыЗаменМасел.СрезПервых(&Дата1, ) КАК ДатыЗаменМаселСрезПервых ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ДатыЗаменМасел.СрезПоследних(&Дата2, ) КАК ДатыЗаменМаселСрезПоследних ПО ДатыЗаменМаселСрезПервых.ТС = ДатыЗаменМаселСрезПоследних.ТС Потом стал такой: ВЫБРАТЬ ДатыЗаменМаселСрезПервых.ТС, ДатыЗаменМаселСрезПервых.ДатаЗамены КАК ДатаЗаменыПервое, ДатыЗаменМаселСрезПоследних.ДатаЗамены КАК ДатаЗаменыКонечное ИЗ РегистрСведений.ДатыЗаменМасел.СрезПервых(&Дата1, Период В(ВЫБРАТЬ МИНИМУМ(ДатыЗаменМаселСрезПервых.Период) ИЗ РегистрСведений.ДатыЗаменМасел.СрезПервых() КАК ДатыЗаменМаселСрезПервых)) КАК ДатыЗаменМаселСрезПервых ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ДатыЗаменМасел.СрезПоследних(&Дата2, Период В(ВЫБРАТЬ МАКСИМУМ(ДатыЗаменМаселСрезПоследних.Период) ИЗ РегистрСведений.ДатыЗаменМасел.СрезПоследних() КАК ДатыЗаменМаселСрезПоследних)) КАК ДатыЗаменМаселСрезПоследних ПО ДатыЗаменМаселСрезПервых.ТС = ДатыЗаменМаселСрезПоследних.ТС Но пока то что хочу не получил. Как это сделать? |
|||
1
Maxus43
29.11.13
✎
10:09
|
первый запрос почему не сработал? что не так?
|
|||
2
Maxus43
29.11.13
✎
10:11
|
в первом запросе сделай ПОЛНОЕ СОЕДИНЕНИЕ,
а в выборке ЕстьNull(ДатыЗаменМаселСрезПервых.ТС, ДатыЗаменМаселСрезПоследних .ТС) |
|||
3
Обработка
29.11.13
✎
10:11
|
(1) По одной Машине выводит несколько значений а мне нужна только одна строчка в выборке.
Вот только по одной машине: MG - (H25) - A 490 HL 03.11.2013 11.03.2013 MG - (H25) - A 490 HL 03.11.2013 03.11.2013 MG - (H25) - A 490 HL 03.11.2013 20.03.2013 MG - (H25) - A 490 HL 03.11.2013 06.07.2013 |
|||
4
Maxus43
29.11.13
✎
10:13
|
жиу хрень убери Период В(ВЫБРАТЬ МИНИМУМ(ДатыЗаменМаселСрезПервых.Период)
|
|||
5
Maxus43
29.11.13
✎
10:14
|
короче понял примерно что хочешь
|
|||
6
Обработка
29.11.13
✎
10:17
|
Не совсем понял к чему ЕстьNull(ДатыЗаменМаселСрезПервых.ТС, ДатыЗаменМаселСрезПоследних.ТС)? и где?
|
|||
7
Feunoir
29.11.13
✎
10:18
|
(0) Странно как-то. Срез первых/последних работает по периоду. У тебя дата замены просто ресурс. А периодичность регистра как установлена?
Мне кажется, что срез первых/последних тут вообще не поможет. |
|||
8
Обработка
29.11.13
✎
10:21
|
(7) Периодичность "В пределах дня"
"Мне кажется, что срез первых/последних тут вообще не поможет." Я тоже думал что придется без срезов. |
|||
9
makfromkz
29.11.13
✎
10:25
|
Если РС периодический нафиг нужно : Ресурс - "ДатаЗаменыМасла" - Дата ???
|
|||
10
makfromkz
29.11.13
✎
10:26
|
тогда ресурс должен быть числовым - типо количествоМасла
|
|||
11
Feunoir
29.11.13
✎
10:27
|
(8) Одним вложенным запросом получаешь первую дату, вторым последнюю, эти запросы соединяешь полным соединением по ТС.
Запросы типа ВЫБРАТЬ ДатыЗаменМасел.ТС, МИНИМУМ(ДатыЗаменМасел.ДатаЗамены) КАК ДатаЗаменыПервое ИЗ РегистрСведений.ДатыЗаменМасел КАК ДатыЗаменМасел ГДЕ ДатыЗаменМасел.ДатаЗамены > &Дата1 ГРУППИРОВАТЬ ПО ДатыЗаменМасел.ТС |
|||
12
Maxus43
29.11.13
✎
10:28
|
Да родится Монтр...
ВЫБРАТЬ ЕСТЬNULL(ВоинскийУчетСрезПоследних.Физлицо, ВоинскийУчетСрезПоследних1.Физлицо) КАК ФизЛицо, МАКСИМУМ(ВоинскийУчетСрезПоследних.Период) КАК Период, МАКСИМУМ(ВоинскийУчетСрезПоследних1.Период) КАК Период1 ПОМЕСТИТЬ втПериоды ИЗ РегистрСведений.ВоинскийУчет.СрезПоследних(&Дата1, ) КАК ВоинскийУчетСрезПоследних ПОЛНОЕ СОЕДИНЕНИЕ РегистрСведений.ВоинскийУчет.СрезПоследних(&Дата2, ) КАК ВоинскийУчетСрезПоследних1 ПО ВоинскийУчетСрезПоследних.Физлицо = ВоинскийУчетСрезПоследних1.Физлицо СГРУППИРОВАТЬ ПО ЕСТЬNULL(ВоинскийУчетСрезПоследних.Физлицо, ВоинскийУчетСрезПоследних1.Физлицо) ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ ВоинскийУчет.Звание, ВоинскийУчет1.Звание КАК Звание1, втПериоды.ФизЛицо ИЗ втПериоды КАК втПериоды ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ВоинскийУчет КАК ВоинскийУчет ПО втПериоды.ФизЛицо = ВоинскийУчет.Физлицо И втПериоды.Период = ВоинскийУчет.Период ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ВоинскийУчет КАК ВоинскийУчет1 ПО втПериоды.ФизЛицо = ВоинскийУчет1.Физлицо И втПериоды.Период1 = ВоинскийУчет1.Период в ВТ срезпоследних надо бы не юзать, для быстроты сделал, чтоб в одну ВТ запихнуть, а не на 2 дробить |
|||
13
Обработка
29.11.13
✎
10:57
|
Спасибо за советы буду пробовать.
|
|||
14
Обработка
29.11.13
✎
15:48
|
Получилось
ВЫБРАТЬ ЕСТЬNULL(ДатыЗаменМаселСрезПервых.ТС, ДатыЗаменМаселСрезПоследних.ТС) КАК ТС, МИНИМУМ(ДатыЗаменМаселСрезПервых.Период) КАК Первая, МАКСИМУМ(ДатыЗаменМаселСрезПоследних.Период) КАК Последняя ПОМЕСТИТЬ ВТ ИЗ РегистрСведений.ДатыЗаменМасел.СрезПервых(&Дата1, ) КАК ДатыЗаменМаселСрезПервых ПОЛНОЕ СОЕДИНЕНИЕ РегистрСведений.ДатыЗаменМасел.СрезПоследних(&Дата2, ) КАК ДатыЗаменМаселСрезПоследних ПО ДатыЗаменМаселСрезПервых.ТС = ДатыЗаменМаселСрезПоследних.ТС ГДЕ ДатыЗаменМаселСрезПервых.ПоказательПробега = &Показатель И ДатыЗаменМаселСрезПоследних.ПоказательПробега = &Показатель СГРУППИРОВАТЬ ПО ЕСТЬNULL(ДатыЗаменМаселСрезПервых.ТС, ДатыЗаменМаселСрезПоследних.ТС) ; |
|||
15
Обработка
29.11.13
✎
15:50
|
У меня есть продолжение задачи в запросе.
Теперь из другого регистра Нужно вытащить пробеги Авто между заменами. Пишу: //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ ПробегиОстаткиИОбороты.ТС, ПробегиОстаткиИОбороты.ПробегПриход, ВТ.Первая, ВТ.Последняя ИЗ ВТ КАК ВТ ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрНакопления.Пробеги.ОстаткиИОбороты (,,день,,) КАК ПробегиОстаткиИОбороты ПО ВТ.ТС = ПробегиОстаткиИОбороты.ТС И ПробегиОстаткиИОбороты.Период МЕЖДУ ВТ.Первая И ВТ.Последняя Но не суммирется пробег а выводится отдельно |
|||
16
Sabbath
29.11.13
✎
15:50
|
(14) вот видишь, только я вошел, и получилось. Все-таки есть от меня польза. Не надо благодарностей, это моя работа
|
|||
17
Salimbek
29.11.13
✎
16:00
|
(15) ОстаткиИОбороты (,,день,,) <- а как оно поймет за какой период пробег нужен?
Бери напрямую из регистра "Пробеги", с условием, что Дата движения между "Первая" и "Последняя" |
|||
18
Обработка
29.11.13
✎
16:10
|
(17) Пробовал что-то пока не вяжется...
|
|||
19
Salimbek
29.11.13
✎
16:10
|
+(17) типа:
Выбрать ТС, Первая, Последняя, СУММА(Пробег) (ВЫБРАТЬ ВТ.ТС, Пробеги.Пробег, ВТ.Первая, ВТ.Последняя ИЗ ВТ КАК ВТ ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.Пробеги КАК Пробеги ПО ПО ВТ.ТС = Пробеги.ТС И ВТ.Первая<=Пробеги.Период И ВТ.Последняя>=Пробеги.Период) КАК Выборка СГРУППИРОВАТЬ ПО ТС, Первая, Последняя |
|||
20
Обработка
29.11.13
✎
16:18
|
(19) Почему два раза выбрать и второй раз со скобкой?
Не работает это.. |
|||
21
mc lammer
29.11.13
✎
16:29
|
не уверен что верно понял описание, но попробуй так:
ВЫБРАТЬ ДатыЗаменМасел.ТС, МИНИМУМ(ДатыЗаменМасел.ДатаЗамены) КАК ДатаЗаменыПервое, МАКСИМУМ(ДатыЗаменМасел.ДатаЗамены) КАК ДатаЗаменыПоследнее, ИЗ РегистрСведений.ДатыЗаменМасел КАК ДатыЗаменМасел ГДЕ ДатыЗаменМасел.ДатаЗамены >= &Дата1 и ДатыЗаменМасел.ДатаЗамены <= &Дата2 ГРУППИРОВАТЬ ПО ДатыЗаменМасел.ТС |
|||
22
Обработка
29.11.13
✎
16:32
|
Второй запрос такой получился. Уже данные получил но не проверял:
//////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ Выборка.ТС, Выборка.Первая, Выборка.Последняя, СУММА(Выборка.ПробегПриход) КАК ПробегПриход ИЗ (ВЫБРАТЬ ВТ.ТС КАК ТС, Пробеги.ПробегПриход КАК ПробегПриход, ВТ.Первая КАК Первая, ВТ.Последняя КАК Последняя ИЗ ВТ КАК ВТ ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ПробегПоСпидометру.Обороты(, &Дата2, Регистратор, ) КАК Пробеги ПО ВТ.ТС = Пробеги.ТС И ВТ.Первая <= Пробеги.Период И ВТ.Последняя >= Пробеги.Период) КАК Выборка СГРУППИРОВАТЬ ПО Выборка.ТС, Выборка.Первая, Выборка.Последняя |
|||
23
Обработка
29.11.13
✎
16:33
|
Меня смущает это:
ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ПробегПоСпидометру.Обороты(, &Дата2, Регистратор, ) |
|||
24
Salimbek
29.11.13
✎
16:57
|
(20) Ты еще скажи, что Вложенные запросы запрещены
|
|||
25
Salimbek
29.11.13
✎
16:57
|
Консоль запросов в этой твоей конфе есть?
|
|||
26
Обработка
29.11.13
✎
17:03
|
(25) Пишу прямо в скд.
Консолем пользуюсь редко. Хотя надо бы. |
|||
27
Salimbek
29.11.13
✎
17:05
|
Попробуй запрос из 19 туда поставить, только везде вместо ВТ. - поставь Параметры
Выбрать ТС, Первая, Последняя, СУММА(Пробег) (ВЫБРАТЬ Пробеги.ТС, Пробеги.Пробег, &Первая, &Последняя ИЗ РегистрНакопления.Пробеги КАК Пробеги ГДЕ ПО Пробеги.ТС = &ТС И &Первая<=Пробеги.Период И &Последняя>=Пробеги.Период) КАК Выборка СГРУППИРОВАТЬ ПО ТС, Первая, Последняя |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |