![]() |
|
Не могу соединить 2 таблицы в рамках одного запроса | ☑ | ||
---|---|---|---|---|
0
Azik2000
24.01.12
✎
21:03
|
Привет всем. Выручайте, голову сломал, не могу написать запрос оптимально! Задача примерно следующая: Есть 2 таблицы, в одной список контрагентов, во второй документы определенного вида по контрагентам. Необходимо получить таблицу, где для каждого контрагента будет указана ссылка на документ, который является последним в рамках документооборота по этому контрагенту. Решить задачу одним запросом.
Смог написать работающий запрос, но он не надежный: ВЫБРАТЬ ВложенныйЗапрос.КонтрагентСсылка, ВложенныйЗапрос.КонтрагентПредставление, ДокументПоставки.Ссылка КАК ПоследняяПоставка ИЗ (ВЫБРАТЬ Контрагенты.Ссылка КАК КонтрагентСсылка, Контрагенты.Наименование КАК КонтрагентПредставление, МАКСИМУМ(Поставки.Дата) КАК ДатаПоставки ИЗ Справочник.Контрагенты КАК Контрагенты ЛЕВОЕ СОЕДИНЕНИЕ Документ.Поставки КАК Поставки ПО Контрагенты.Ссылка = Поставки.Контрагент СГРУППИРОВАТЬ ПО Контрагенты.Ссылка, Контрагенты.Наименование) КАК ВложенныйЗапрос ЛЕВОЕ СОЕДИНЕНИЕ Документ.Поставки КАК ДокументПоставки ПО ВложенныйЗапрос.КонтрагентСсылка = ДокументПоставки.Контрагент И ВложенныйЗапрос.ДатаПоставки = ДокументПоставки.Дата Т.е. получается что я сначала нахожу дату последнего документа, а потом уже тем же соединением получаю информацию из документа. НО здесь не надежность, если на время последнего документа будет существовать несколько документов по контрагенту. ХЭЛППП ! |
|||
1
Wobland
24.01.12
✎
21:07
|
есть двадцать "последних" документов по контрагенту. какой из них твой?
|
|||
2
zak555
24.01.12
✎
21:07
|
выбрать первый док
док.контрол в спискеКотров условие период группировка по убыванию по доку |
|||
3
Wobland
24.01.12
✎
21:08
|
и ВЫБРАТЬ ПЕРВЫЕ 1 УПОРЯДОЧИТЬ ПО Дата вроде как быстрее должно работать
|
|||
4
Azik2000
24.01.12
✎
21:09
|
(1) Любой из этих 20, если они в пределах одной секунды, главное чтобы левым соединением потом не размножить этого контрагента для каждого документа. Зак, напиши языком запросов, не получается у мну никак, пробовал я уже так
|
|||
5
Wobland
24.01.12
✎
21:12
|
не, ну а чо? делаешь (3), и всё начинает работать, не?
|
|||
6
Azik2000
24.01.12
✎
21:12
|
пытался я через "первые" и сортировку по дате сделать, не получилось у мну. Напишите плиз запрос, раз вам видно решение
|
|||
7
Wobland
24.01.12
✎
21:14
|
(6) что за Документ.Поставки? самописное?
|
|||
8
Azik2000
24.01.12
✎
21:18
|
(7) да, конфа не типовая, но это не суть важно. Вобланд, смотри, если через первые и сортировку, то обрубаются остальные контрагенты по списку, тут как то надо по хитрому. В общем не можу я написать, пробовал и так и этак. Прошу только советовать в тексте запроса
|
|||
9
Wobland
24.01.12
✎
21:24
|
я чего-то не понял. в ВложенныйЗапрос не отвечает требованиям? //не суди строго, у нас первый час уже
|
|||
10
Wobland
24.01.12
✎
21:24
|
(9) *а ВложенныйЗапрос
|
|||
11
Azik2000
24.01.12
✎
21:26
|
нет не отвечает, требования треьуют получить список контрагентов без повторения и для каждого документ последний. Если то что я написал использовать, то когда в одну секунду будут 3 документа по одному контрагенту, то левым соединением контрагентов тоже "разтроит", какбэ так
|
|||
12
Wobland
24.01.12
✎
21:29
|
ВЫБРАТЬ ПЕРВЫЕ 1 к Вложенному?
|
|||
13
Wobland
24.01.12
✎
21:29
|
(12) фигню сказал, пардоньте
|
|||
14
Azik2000
24.01.12
✎
21:32
|
вот и я изначально посчитал что быстро справлюсь, анннет. Толи просто день не мой и решение простое, но голова никак не поворачивается в сторону этого решения, толи тут надо действительно помозговать
|
|||
15
Wobland
24.01.12
✎
21:34
|
ТаблицаРаз - все контрагенты. ТаблицаДва - Контрагент+ПоследнийДокумент. соединяешь, получаешь искомое
|
|||
16
Wobland
24.01.12
✎
21:34
|
+(15) ну и НЕ ЭтоГруппа у ТаблицыРаз, наверное
|
|||
17
Azik2000
24.01.12
✎
21:39
|
слушай, раз - оп, два - тыдынс, три - вуаля. Не поняимать моя твоя. Напиши запросом! Но мне кажется что не так как посоветовал
|
|||
18
Дядя Васька
24.01.12
✎
21:44
|
(17) Ну типа выбрать первые с сортировкой взад наверное...
|
|||
19
Azik2000
24.01.12
✎
21:46
|
Гражданне, у кого еще есть варианты ......
|
|||
20
Wobland
24.01.12
✎
21:51
|
ну-ка
ВЫБРАТЬ ПЕРВЫЕ 1 Поставки.Ссылка, Поставки.Контрагент, Поставки.Дата КАК Дата ПОМЕСТИТЬ ВТ ИЗ Документ.Поставки КАК Поставки УПОРЯДОЧИТЬ ПО Дата УБЫВ ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ вт.Ссылка, вт.Контрагент, вт.Дата, Контрагенты.Ссылка КАК Ссылка1 ИЗ Справочник.Контрагенты КАК Контрагенты ЛЕВОЕ СОЕДИНЕНИЕ ВТ КАК вт ПО вт.Контрагент = Контрагенты.Ссылка |
|||
21
Дядя Васька
24.01.12
✎
21:52
|
(19) Извини, но ты даже наверное не представляешь КАК впадлу мозгами скрипеть когда весь день тебя закидывают различными задачами по трое сразу, а к вечеру "выясняется" что ты оказывается весь день одну галочку рисовал... Мля, если эта дура завтра не оплатит, откачу как было нафик...
|
|||
22
Wobland
24.01.12
✎
21:54
|
(21) да ладно, подобная фигня, спать не иду из альтруизма ;)
|
|||
23
Wobland
24.01.12
✎
21:56
|
ВТ не то, конечно, даст, надо группировать по контрагенту с максимумом даты
|
|||
24
Дядя Васька
24.01.12
✎
21:57
|
(22) Да так-то не жалко... Просто когда люди торгуют железом составами и экономят даже на бумаге и соответственно прогах тоже. Ну ты понимаешь...
|
|||
25
Wobland
24.01.12
✎
21:58
|
(24) было дело, проходил ;)
|
|||
26
Wingless
24.01.12
✎
21:58
|
ВЫБРАТЬ
ВложенныйЗапрос.КонтрагентСсылка, ВложенныйЗапрос.КонтрагентПредставление, МАКСИМУМ(ДокументПоставки.Ссылка) КАК ПоследняяПоставка ИЗ (ВЫБРАТЬ Контрагенты.Ссылка КАК КонтрагентСсылка, Контрагенты.Наименование КАК КонтрагентПредставление, МАКСИМУМ(Поставки.Дата) КАК ДатаПоставки ИЗ Справочник.Контрагенты КАК Контрагенты ЛЕВОЕ СОЕДИНЕНИЕ Документ.Поставки КАК Поставки ПО Контрагенты.Ссылка = Поставки.Контрагент СГРУППИРОВАТЬ ПО Контрагенты.Ссылка, Контрагенты.Наименование) КАК ВложенныйЗапрос ЛЕВОЕ СОЕДИНЕНИЕ Документ.Поставки КАК ДокументПоставки ПО ВложенныйЗапрос.КонтрагентСсылка = ДокументПоставки.Контрагент И ВложенныйЗапрос.ДатаПоставки = ДокументПоставки.Дата СГРУППИРОВАТЬ ПО ВложенныйЗапрос.КонтрагентСсылка, ВложенныйЗапрос.КонтрагентПредставление, |
|||
27
Wingless
24.01.12
✎
21:59
|
Предложения по использовать Выбрать первые пипец конечно...
|
|||
28
Azik2000
24.01.12
✎
22:00
|
Дядь Вась, держись. Как же я тебя понимаю ) Я сегодня на этот гребаный запрос потратил туеву хучу времени, и дернул меня язык пообещать юзеру что эту задачу можно решить за пол часа. Вобланд, вроде не совсем то получается, ты сначала получаеешь первый документ всеравно от какого контрагента, далее только для него стыкуешь таблицу с контрагентами, совсем даже не то
|
|||
29
acsent
24.01.12
✎
22:01
|
классический вопрос про срез последних ))
|
|||
30
acsent
24.01.12
✎
22:02
|
||||
31
Wingless
24.01.12
✎
22:04
|
(29) Мимо ))
|
|||
32
Wobland
24.01.12
✎
22:05
|
(31) ахха
|
|||
33
Дядя Васька
24.01.12
✎
22:08
|
(28) Ну я-то обещал за три и сделал за два, что заказывали-то. Еще в прошлую пятницу. В субботу одмины снесли что сделал, откатив базу на четверг, приехал восстановить вчерась, благо работал в копии 15 минут заняло. После чего посыпалось еще куча вопросов на два дня работы и в итоге претензия что я вообще обещал все сделать за три часа, а уже вон сколько вожусь, а сегодня так и вовсе весь день одну галочку делал (в шесть вечера попросили перенести на форму дока из обработки, просто начальница как раз подошла). Ну верну как было в тяпницу, фигли. Удалю с шифтом нахрен! :)
|
|||
34
Wobland
24.01.12
✎
22:09
|
ВЫБРАТЬ ПЕРВЫЕ 1
Поставки.Контрагент, МАКСИМУМ(Поставки.Дата) КАК Дата, Поставки.Ссылка ПОМЕСТИТЬ ВТ ИЗ Документ.Поставки КАК Поставки СГРУППИРОВАТЬ ПО Поставки.Контрагент, Поставки.Ссылка УПОРЯДОЧИТЬ ПО Дата УБЫВ ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ ВТ.Контрагент, ВТ.Дата, Контрагенты.Ссылка КАК Ссылка1, ВТ.Ссылка ИЗ Справочник.Контрагенты КАК Контрагенты ЛЕВОЕ СОЕДИНЕНИЕ ВТ КАК ВТ ПО (ВТ.Контрагент = Контрагенты.Ссылка) |
|||
35
Wobland
24.01.12
✎
22:11
|
(33) мастдайщик ;) меня тут как-то обругали за ctrl+ins/shift+ins... я удаляю по F8 или Del ;)
|
|||
36
Azik2000
24.01.12
✎
22:13
|
(30) способ с актуальными курсами валют без применения среза последних тут не применим, я в курсе его, но тут другой случай.
(33) а в чем была причина руганья то ? |
|||
37
Vahe
24.01.12
✎
22:15
|
(36) используй момент времени
|
|||
38
Wobland
24.01.12
✎
22:16
|
(36) иди уже (34) проверяй, мне интересно
|
|||
39
Wobland
24.01.12
✎
22:16
|
(37) он сказал, пофих, пусть так и будет. пока не вкурит
|
|||
40
Vahe
24.01.12
✎
22:17
|
и сгруппировать не нужно
|
|||
41
Дядя Васька
24.01.12
✎
22:17
|
(35) Ctrl-Ins Shift-Ins и сам пользуюсь до сих пор, просто Shift с Del'ом уже в винде придумали, раньше не было такого )
|
|||
42
Vahe
24.01.12
✎
22:18
|
больше чем момент времени последнего документа по контрагенту нету
|
|||
43
Дядя Васька
24.01.12
✎
22:19
|
(36) Да жадные они просто. Хотят внедрение восьмерки за три часа... Руганье сильно сказано конечно, оплатят я думаю, но фиксировать там надо каждый чих...
|
|||
44
Azik2000
24.01.12
✎
22:24
|
Вобланд, (34) тут совсем никак не канает, вариант у (26) получается самый оптимальный.
(43) Вот потому при поиске нового места работы всегда отсекал франчи и консалтинги, каждый чих нужно фиксировать, за каждый пук доплачивать. Заказчика жаба душить начинает когда начинает считать все. На одном месте работа как то менее "напрягающая", сидишь себе, ковыряешь то что сам раньше написал, все в курсе, оптимизируешь там кусочек, там кусочек. Да хоть и ничего не делаешь, значешь что в конце месяца получишь то что и в прошлом |
|||
45
Wobland
24.01.12
✎
22:25
|
(41) кстати, в то же фаре шифт+дел - о том же. лично я переназначил кнопку дел ;)
|
|||
46
Vahe
24.01.12
✎
22:28
|
(44) можно без СГРУППИРОВАТЬ
можно через ЛЕВОЕ СОЕДИНЕНИЕ + ГДЕ |
|||
47
Wobland
24.01.12
✎
22:28
|
(44) получилось или где? скажи (26) отчётливое спасибо. я как-то сегодня на призы не рассчитывал, но работал всеръёз. с учётом того, что уже пол-второго
|
|||
48
Azik2000
24.01.12
✎
22:32
|
Ребят, всем огроменное спасибо за приятный не напрягающий многолог, Wingless особая благодарность, за четко выложенный вариант верного решения. Ну и конечно же Wobland, дружищще, конечно тебе спасибо за активное участие.
|
|||
49
Azik2000
24.01.12
✎
22:34
|
(46) на счет вариванта без применения "Сгруппировать", как то даже не представляю решения, напиши если не сложно свой вариант
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |