|
Срез последних на дату, если нужно получить последнее измерение | ☑ | ||
---|---|---|---|---|
0
triviumfan
23.08.18
✎
12:49
|
Доброго дня, коллеги!
Есть периодический регистр с такой структурой: https://yadi.sk/i/6yLiwy3Z3aVKQf Где тип значения поле "Значение" составное, меня интересует КонтрагентСсылка. Так вот необходимо получить последний авто по каждому контрагенту. У меня все время авто дублируется. Обычно срез на дату делал, чтобы ресурс получить, а тут измерение :) Пробовал сначала так:
Потом напрямую, сгруппировал, агрегировал, соединял - все равно дубли авто:) Хелп! |
|||
4
Малыш Джон
23.08.18
✎
13:35
|
(2) выбираешь в одну вт все данные, которые тебе нужны Плюс период
во вторую вт - те измерения, которые нужны плюс период, группировка по измерениям - период в максиму соединяешь внутренним(или левым, как угодно) первую вт со второй - по измерениям и периоду |
|||
5
catena
23.08.18
✎
13:36
|
(2)Найти максимальную дату в разрезе нужного ключа, соединить с регистром по ключу и дате для определения прочих значений.
|
|||
6
Малыш Джон
23.08.18
✎
13:38
|
(2) а вообще - вот тут посмотри:
Последний документ по контрагенту |
|||
7
triviumfan
23.08.18
✎
13:52
|
(5) Пытался.
|
|||
8
dmt
23.08.18
✎
13:55
|
как вариант...
ПО Выразить(АвтомобилиСрезПоследних.Значение КАК Справочник.Контрагенты) |
|||
9
dmt
23.08.18
✎
13:58
|
(7) здесь тоже дублируется?
|
|||
10
dmpl
23.08.18
✎
13:59
|
(0) А что, условие Значение ССЫЛКА Справочник.Контрагенты не отрабатывает?
|
|||
11
dmt
23.08.18
✎
14:01
|
ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.Автомобили КАК Автомобили
ПО ПоследниеАвто.Автомобиль = Автомобили.Автомобиль >>> И Автомобили.ВидЗначения = ЗНАЧЕНИЕ(Перечисление.ДополнительнаяИнформацияАвтомобилей.Хозяин) <<< |
|||
12
DrWatson
23.08.18
✎
14:02
|
(7) Условие на Автомобили.ВидЗначения во внутреннем соединении не помешает. А то он так не только хозяина может вывести.
|
|||
13
Фрэнки
23.08.18
✎
14:03
|
у одного меня подозрение, что для такого использования, как в топике, у данного регистра не подходящая структура полей?
|
|||
14
dmt
23.08.18
✎
14:04
|
(13) кого это останавливает?!
|
|||
15
Фрэнки
23.08.18
✎
14:07
|
ВЫБРАТЬ
МАКСИМУМ(Автомобили.Период) КАК Период, Автомобили.Автомобиль КАК Автомобиль ИЗ РегистрСведений.Автомобили КАК Автомобили ГДЕ Автомобили.ВидЗначения = ЗНАЧЕНИЕ(Перечисление.ДополнительнаяИнформацияАвтомобилей.Хозяин - это же множество записей с одним и тем же значением Период будет только и всего Пары Автомобиль+Значение (в данном случае Контрагент) уникальны? Замены авто бывают? |
|||
16
Малыш Джон
23.08.18
✎
14:09
|
(15) если контрагент - это измерение, то сам понимаешь, пара автомобиль+контрагент может быть и не уникальна
|
|||
17
Малыш Джон
23.08.18
✎
14:10
|
+(16) а, пардон, не глянул структуру РС
|
|||
18
dmpl
23.08.18
✎
14:11
|
(13) Предлагаешь еще один завести?
|
|||
19
triviumfan
23.08.18
✎
14:12
|
(15) конечно бывают. Да, структура регистра вот такая... я и не могу получить, что мне надо
|
|||
20
Фрэнки
23.08.18
✎
14:14
|
(19) т.е. одно и тоже авто может попадать к разным контрагентам в разные даты?
|
|||
21
triviumfan
23.08.18
✎
14:14
|
Допустим, получаю я сначала период, клиент и авто.
Но с разным периодом может быть несколько авто. у клиента ведь несколько машин может быть. Вот вся проблема, как агрегировать/группировать, чтобы получить последний авто клиента |
|||
22
triviumfan
23.08.18
✎
14:14
|
(20) да. был авто у френки, а стал мой
|
|||
23
Малыш Джон
23.08.18
✎
14:14
|
(20) а это уже коммерческая тайна))
|
|||
24
Tonik992
23.08.18
✎
14:19
|
Что-то похожее у меня спрашивали на нескольких собеседованиях.
|
|||
25
triviumfan
23.08.18
✎
14:19
|
(22) в данном случае будет так:
Период | Авто | Клиент 01.01.2018 | копейка а777ра177 | Френки 22.08.2018 | копейка а777ра177 | triviumfan |
|||
26
triviumfan
23.08.18
✎
14:20
|
А вообще в регистре содержится и пробег, и госномер и всякие периодические параметры. За тип значения отвечает ещё одно измерение "ВидЗначения"
|
|||
27
dmt
23.08.18
✎
14:20
|
(21) елы-палы, так тебе не ПоследниеАвто нужны, а ПоследниеЗаписиКонтрагентов
|
|||
28
Tonik992
23.08.18
✎
14:22
|
(25) ну ты же ответ на поверхности!
получаешь максимум по периоду (максимальные даты по авто) с группировкой по Авто. А потом делаешь соединение по ТЗ1.Период = ТЗ2.Период. |
|||
29
DrWatson
23.08.18
✎
14:22
|
(7)+(11). Не работает что-ли? Что нет так-то?
|
|||
30
Малыш Джон
23.08.18
✎
14:22
|
(28) и по ТЗ1.Авто=ТЗ2.Авто
|
|||
31
triviumfan
23.08.18
✎
14:24
|
(29) Дубли авто. https://yadi.sk/i/8ZB3iHGj3aVXq5
|
|||
32
Rovan
гуру
23.08.18
✎
14:25
|
(15)
ВЫБРАТЬ * ИЗ РегистрСведений.Автомобили КАК Автомобили ГДЕ ( Период, Автомобиль ) В (ВЫБРАТЬ МАКСИМУМ(Автомобили.Период) КАК Период, Автомобили.Автомобиль КАК Автомобиль ИЗ РегистрСведений.Автомобили КАК Автомобили ГДЕ Автомобили.ВидЗначения = ЗНАЧЕНИЕ(Перечисление.ДополнительнаяИнформацияАвтомобилей.Хозяин СГРУППИРОВАТЬ ПО Автомобили.Автомобиль ) |
|||
33
dmt
23.08.18
✎
14:26
|
(28) не по авто, по Контрагенту
|
|||
34
dmt
23.08.18
✎
14:29
|
(31) правильно, у Дмитрия 2 авто
|
|||
35
Фрэнки
23.08.18
✎
14:33
|
Вот и я про то, что несколько авто у одного контрагента при такой структуре - это нормальное поведение. Оно же берет разные Авто, а Измерением является именно Авто
|
|||
36
triviumfan
23.08.18
✎
14:34
|
(33) точняк! по контрагенту...
Работает... (32) не работает. |
|||
37
unregistered
23.08.18
✎
14:34
|
Хоть бы структуру регистра озвучили. Неужели так сложно, что, кроме как на файлопомойки картинки выкладывать, никак нельзя?
У многих ведь файлопомойки закрыты на работе. |
|||
38
dmt
23.08.18
✎
14:36
|
(36) И еще нужно разок обернуть, найти Максимум(Автомобиль), вдруг у Дмитрия в 1 день 2 машины появятся
|
|||
39
dmt
23.08.18
✎
14:38
|
(37) плохо, что сюда нельзя в сообщение вставить
|
|||
40
triviumfan
23.08.18
✎
14:41
|
(37) запрещен яндекс дикс? Очень жаль вас...
|
|||
41
triviumfan
23.08.18
✎
14:42
|
(39) Тогда Волшебник не потянет содержание бд :)
|
|||
42
Вафель
23.08.18
✎
15:19
|
по идее и в (0) не должно быть дублей, тк авто + зозяин - уникальная комбинация
|
|||
43
dmt
23.08.18
✎
15:42
|
(42) Хозяин - ресурс, у Димаса уже сейчас есть 2 авто. Ветка про инерцию мышления.
|
|||
44
triviumfan
23.08.18
✎
16:54
|
(36) Все-таки некорректен запрос, потому что после смены владельца авто не должен быть отображаться у прошлого хозяина
|
|||
45
catena
24.08.18
✎
05:15
|
(44)Этот запрос выводит каждому контрагенту последнее во владении авто. Если вам нужно условие еще и о текущем(незаконченном) владении, так и отбирайте только незавершенные.
И да, файлопомойки на рабочих машинах часто закрыты. А еще рабочий интернет бывает лимитированным. Озвучание структуры регистра в сообщении сильно расширит круг помощников. |
|||
46
triviumfan
27.08.18
✎
09:58
|
(45) "отбирайте только незавершенные", - легко сказать.
"А еще рабочий интернет бывает лимитированным", - wtf?! Структура периодического регистра (период день): - измерение "Автомобиль" типа СправочникСсылка.Автомобили - измерение "ВидЗначения" типа ПеречислениеСсылка.ДополнительнаяИнформацияАвтомобилей - ресурс "Значение" составного типа, в числе которых СправочникСсылка.Контрагенты. Нужно найти последний авто клиента. Я уже бросил эту задачу, тупо беру ВТ СрезаПоследних и использую максимум(авто). Это не совсем то, что от меня требовали, но слишком много времени на это я потратил. |
|||
47
Fram
27.08.18
✎
10:10
|
(46) нормально так люди работают. их просят последний по дате, а они выдают максимальную ссылку
|
|||
48
Fram
27.08.18
✎
10:11
|
Вообще то это задачка с соболезнований, то есть базовое умение построения запросов
|
|||
49
Fram
27.08.18
✎
10:11
|
Собеседований блин
|
|||
50
triviumfan
27.08.18
✎
12:01
|
(48) базовое? ещё один петросян, хотя, после скандала со степаненко вообще не смешно.
|
|||
51
Tonik992
27.08.18
✎
12:38
|
(50) может и не базование, но через меня пару раз проходили такие задачки на соболезовании
|
|||
52
Малыш Джон
27.08.18
✎
12:48
|
(50) ну вообще, способность к мышлению на некоем уровне абстракции, способность анализировать и сопоставлять - это да, базовые требования к программисту
|
|||
53
catena
27.08.18
✎
12:59
|
(51)У вас очень любопытный словарь автозамены)
|
|||
54
triviumfan
27.08.18
✎
14:31
|
(52) тут ни разу не прозвучал правильный ответ, приведены ссылки, которые никоим разом не относятся к вопросу. Типичная миста - развод демагогии.
Все твои(!) ответы в этой ветке на уровне начинающего с опытом 1 месяц. А сколько пафоса... У вас даже ума не хватает понять структуру регистра... какая *** абстракция. |
|||
55
Малыш Джон
27.08.18
✎
14:45
|
(54) ты не поверишь, но в (4) я тебе дал готовое решение, которое ты увы даже в разжеванном виде не осилил
|
|||
56
Малыш Джон
27.08.18
✎
14:46
|
аххаа, и даже в итоге, после всей ветки сделал не так как было дано в задании
|
|||
57
Tonik992
27.08.18
✎
14:56
|
(47) Максимум(Авто) выдаст не последний авто, а самую старшую ссылку.
ТС реально щас бизнес поламает клиенту. И структура регистра не соответствует тому, что надо.. Получается, что в твоей задаче "Значение" должно быть измерением, а авто "Ресурсом". А если это так, то весь ответ в (4). Тебе надо СрезПоследних использовать "свой". |
|||
58
ADirks
27.08.18
✎
14:59
|
(48) Соболезнования - это прям зачёт-зачёт!!! :))
надо записать в книжечку |
|||
59
los_hooliganos
27.08.18
✎
15:04
|
Причем тут срез последних, если структура регистра изначально неверная?
Необходимо самому написать срез последних и все. |
|||
60
triviumfan
27.08.18
✎
15:12
|
(55) (57) ещё раз ознакомьтесь со структурой регистра. похоже, что вы сами так и не смогли это осилить.
|
|||
61
Малыш Джон
27.08.18
✎
15:15
|
(60) когда делаешь срез руками - вообще не важно, что у тебя там ресурс, а что измерения.
Срез последних вообще можно в ТЗ сделать, если есть колонка, по которой определяется порядок строк. |
|||
62
Salimbek
27.08.18
✎
15:19
|
1) Отбираем Авто, Максимум(Период) - так получаем последние записи по данному Автомобилю
2) Вытаскиваем последнего Хозяина, соединив Выборку 1) и РС по Период=МаксПериод и Авто=Авто. Получаем структуру Период, Авто, Хозяин 3) Из этих данных выбираем последнюю запись по владельцу Хозяин, Максимум(Период) 4) Теперь можем и получить Авто, соединив по Период=МаксПериод и Хозяин=Хозяин. |
|||
63
Малыш Джон
27.08.18
✎
15:23
|
(62) у тебя в 2) уже вытаскивается одна запись, зачем её ещё раз к максимуму периода приводит и ещё раз соединять?
А если периоды могут быть задвоены, тогда 3) ничего не даст |
|||
64
triviumfan
27.08.18
✎
15:23
|
(4)
|
|||
65
Малыш Джон
27.08.18
✎
15:26
|
(64) ну соединение с вложенным запросом - это конечно хреново, но в целом - да, если убрать условие "ГДЕ
ИсходныеДанные.Контрагент = &Контрагент ", то ты получил последнее авто по каждому контрагенту |
|||
66
Tonik992
27.08.18
✎
15:27
|
(64) Ну конечно бред, т.к. отбор по контрагенту еще нужно было сделать в первом пакете запроса.
|
|||
67
Малыш Джон
27.08.18
✎
15:28
|
(66) ай, это уже мелочи
|
|||
68
Tonik992
27.08.18
✎
15:30
|
(67) Относительно вывода конечного результата для ТС - да.
Но так это не мелочь. |
|||
69
Salimbek
27.08.18
✎
15:31
|
(63) В 2) мы отобрали данные по каждому из Авто.
Т.е., например, следующие условия ты взял машину М1 1-го числа покататься, а 2-го Тоник. Потом 3-го Тоник взял покататься машину М2 То получим: 01.08 Джон М1 02.08 Тоник М1 03.08 Тоник М2 После выборки 2) мы получаем последние данные по каждому автомобилю, т.е. 02.08 Тоник М1 03.08 Тоник М2 И вот из этой выборки (как я понял) аффтар и хочет узнать - каким последним авто владеет юзер. И именно для этого остальные выборки. |
|||
70
Salimbek
27.08.18
✎
15:33
|
Выборка (64) не подходит, потому что выдаст
01.08 Джон М1 03.08 Тоник М2 Но Джон уже НЕ владеет машиной М1 |
|||
71
Малыш Джон
27.08.18
✎
15:34
|
(69) так вроде ж в 1) группируешь по авто и период в максимум, не? тогда по каждому авто - только одна строчка.
после соединения в 2) по каждому авто - тоже одна строчка |
|||
72
triviumfan
27.08.18
✎
15:35
|
||||
73
Малыш Джон
27.08.18
✎
15:35
|
(69) не, все понял, в (71) - ерунду написал
|
|||
74
triviumfan
27.08.18
✎
15:37
|
(72) в данном примере у этого контрагента вообще нет авто на текущую дату. У него когда то был авто, но он его продал.
|
|||
75
Малыш Джон
27.08.18
✎
15:37
|
(72) и что не так? по твоему автомобилю последний хозяин - Виктор Геннадьевич
|
|||
76
Малыш Джон
27.08.18
✎
15:38
|
(74 а при чем тут есть или нету авто на текущий момент? у тебя в регистре где зафиксирована инфа о том что он перестал быть хозяином машины?
|
|||
77
Tonik992
27.08.18
✎
15:38
|
(72)
"получить последний авто по каждому контрагенту" Для этого владельца это был его последним авто. Ты чего, вась? Переформулируй постановку задачи, пожалуйста. |
|||
78
Salimbek
27.08.18
✎
15:38
|
(72) Условие надо не просто убрать, а оставить то же, как и при отборе 1-й таблицы:
ГДЕ Автомобили.ВидЗначения = ЗНАЧЕНИЕ(Перечисление.ДополнительнаяИнформацияАвтомобилей.Хозяин) |
|||
79
triviumfan
27.08.18
✎
15:39
|
(76) Ещё раз посмотри на структуру регистра, на скрин последний что я прислал (там 2й владелец Елена). И если ты всё равно не понимаешь - то я сдаюсь, ты победил.
|
|||
80
Малыш Джон
27.08.18
✎
15:39
|
(79) ещё раз тебе вопрос задаю:
"у тебя в регистре где зафиксирована инфа о том что он перестал быть хозяином машины?" |
|||
81
Salimbek
27.08.18
✎
15:39
|
(79) Я тебе написал алгоритм в (62)
|
|||
82
triviumfan
27.08.18
✎
15:39
|
(77) Получить ТЕКУЩЕЕ авто по каждому контрагенту.
|
|||
83
Малыш Джон
27.08.18
✎
15:41
|
(79)>>там 2й владелец Елена
какая у Елены дата и какая у Виктора дата? |
|||
84
Tonik992
27.08.18
✎
15:41
|
(82) Глянь на первое сообщение. Где там ТЕКУЩЕЕ? Я полную твою цитату привел. Так что надо согласиться, что ты был не прав, и мы продолжим дальше
|
|||
85
triviumfan
27.08.18
✎
15:41
|
(80) последняя запись по измерению "ВидЗначения" = Хозяин говорит о том, что это текущий хозяин авто. регистр ПЕРИОДИЧЕСКИЙ для чего?!
|
|||
86
triviumfan
27.08.18
✎
15:41
|
(84) Получается что так...
|
|||
87
triviumfan
27.08.18
✎
15:43
|
||||
88
Малыш Джон
27.08.18
✎
15:45
|
(87) блеать...
По АВТО надо группировать, а не по контрагенту, потмоу что тебе по АВТО надо последнюю дату получить! |
|||
89
Малыш Джон
27.08.18
✎
15:45
|
рукалицо
|
|||
90
Salimbek
27.08.18
✎
15:46
|
(87) А так:
|
|||
91
Малыш Джон
27.08.18
✎
15:46
|
см (28)
|
|||
92
Малыш Джон
27.08.18
✎
15:48
|
(90) последний хозяин последней авто?)))
какой-то грустный запрос) |
|||
93
Salimbek
27.08.18
✎
15:53
|
(92) А в чем проблема? Мы хотим знать, какое _находящееся_во_владении_ авто взял хозяин последним.
|
|||
94
Малыш Джон
27.08.18
✎
15:54
|
(92) нет, проблем нет) просто как-то грустно звучит)
|
|||
95
Малыш Джон
27.08.18
✎
15:55
|
(93) и кстати, из списка выпадают те авто, после которых человек взял другое авто.
т.е. инфы по ним такой запрос не даст |
|||
96
Salimbek
27.08.18
✎
15:58
|
(95) Это условие в (0) "Так вот необходимо получить последний авто по каждому контрагенту."
|
|||
97
Tonik992
27.08.18
✎
16:01
|
(96) Вы к нам поздно пришли -)
|
|||
98
Salimbek
27.08.18
✎
16:02
|
(97) Я уже заметил :-)
|
|||
99
Малыш Джон
27.08.18
✎
16:05
|
(96) ну тогда это надо переформулировать в "получить последнее авто по каждому контрагенту из текущих владельцев авто"
тогда, да, все верно |
|||
100
triviumfan
27.08.18
✎
16:11
|
(90) похоже на правду. спс, посмотрим.
|
|||
101
triviumfan
27.08.18
✎
16:14
|
(95) так нужно получить ТЕКУЩЕЕ И ПОСЛЕДНЕЕ АВТО. Т.е. если у контрагента на текущий момент 5 авто, то берём последнее, а если 0, но когда то он владел чем-то, то ничего не нужно брать!
|
|||
102
Малыш Джон
27.08.18
✎
16:18
|
(101) так и нужно было формулировать
|
|||
103
Малыш Джон
27.08.18
✎
16:20
|
а точнее - это "выбрать последнего владельца авто среди текущих"
и тут, да, как в (90) сначала срез по авто, потом срез по контрагенту |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |