|
v7: подскажите по прямому запросу | ☑ | ||
---|---|---|---|---|
0
monsterZE
13.08.13
✎
17:45
|
смысл замута - достать последние приходные цены на товар относительно документа реализации.. т.е. реализация от 01-05-2013, приходы на товар1 от 01-03, 02-04, 15-04 - нужна цена из 15-04
ТекстЗапроса = " |SELECT | Жур.IDDoc as [Док $Документ.ПриходнаяНал] | ,$ДокСтр.Товар as [Товар $Справочник.Товары] | ,$ДокСтр.Цена as Цена |FROM | _1SJourn as Жур (NOLOCK) |INNER JOIN | $Документ.ПриходнаяНал as Док (NOLOCK) ON Док.IDDoc = Жур.IDDoc |INNER JOIN | $ДокументСтроки.ПриходнаяНал as ДокСтр (NOLOCK) ON ДокСтр.IDDoc = Жур.IDDoc |WHERE | Жур.Date_Time_IDDoc BETWEEN :НачДата AND :КонДата~ | AND $Док.Клиент = :ГП | AND $Док.ПризнакНакладной = $Перечисление.ПризнПрихНакл.Закупка |ORDER BY Жур.IDDoc |"; |
|||
1
monsterZE
13.08.13
✎
17:48
|
т.е. как этот запрос "сгруппировать" по товару с учетом даты документа, дабы впендюрить последнюю цену =)
|
|||
2
Ёпрст
13.08.13
✎
17:49
|
ORDER BY Жур.IDDoc ... и чего ты хочешь от этого ?
:) |
|||
3
Ёпрст
13.08.13
✎
17:50
|
сортируй desc по позиции документа.
|
|||
4
Ёпрст
13.08.13
✎
17:50
|
ну и top 1
|
|||
5
Ёпрст
13.08.13
✎
17:52
|
взять.. если номенклатур много, то получить последние max(позиция) по group by номенклатурка в подзапрос и в основном уже брать цены, когда позиция дока = позиция из подзапроса.
|
|||
6
monsterZE
13.08.13
✎
17:52
|
(2) =) ты не понял, этот запрос просто выбирает ВСЕ строки из всех приходников со всем товаром
интересуюсь именно как его "ужать до нужного" |
|||
7
monsterZE
13.08.13
✎
17:54
|
(4) топ 1 - вернет мне одну запись =) а мне надо все
|
|||
8
monsterZE
13.08.13
✎
17:56
|
т.е. в идиале - вот расходник с товар1, товар2, товар3
на эти товары было по 1,2,3 прихода одним запросом выбрать цены из последних приходов |
|||
9
Ёпрст
13.08.13
✎
17:56
|
см. (5)
|
|||
10
monsterZE
13.08.13
✎
18:00
|
(9) ага, понял =)
|
|||
11
monsterZE
13.08.13
✎
18:03
|
к (5) мне даже не надо их сравнивать с моим доком
надо просто получить табличку цен по максимальной позиции приходника до позиции расходника |
|||
12
monsterZE
13.08.13
✎
18:05
|
можно просто отсортировать и получать первый найденный в таблице, но таблица будет уж очень большая
|
|||
13
Ёпрст
13.08.13
✎
18:15
|
(11) и ?
|
|||
14
monsterZE
14.08.13
✎
11:48
|
в итоге, что получилось:
ТекстЗапроса = " |SELECT | $ДокСтр.Товар as [Товар $Справочник.Товары] | ,$ДокСтр.Цена as Цена |FROM | _1SJourn as Жур (NOLOCK) |INNER JOIN | $Документ.ПриходнаяНал as Док (NOLOCK) ON Док.IDDoc = Жур.IDDoc |INNER JOIN | $ДокументСтроки.ПриходнаяНал as ДокСтр (NOLOCK) ON ДокСтр.IDDoc = Жур.IDDoc |INNER JOIN | (SELECT | $ДокСтрПод.Товар as Товар | FROM | _1SJourn as ЖурПод (NOLOCK) | INNER JOIN | $Документ.ПриходнаяНал as ДокПод (NOLOCK) ON ДокПод.IDDoc = ЖурПод.IDDoc | INNER JOIN | $ДокументСтроки.ПриходнаяНал as ДокСтрПод (NOLOCK) ON ДокСтрПод.IDDoc = ЖурПод.IDDoc | WHERE | ЖурПод.Date_Time_IDDoc BETWEEN :НачДата AND :КонДата~ | AND $ДокПод.Клиент = :ГП | AND $ДокПод.ПризнакНакладной = $Перечисление.ПризнПрихНакл.Закупка | GROUP BY $ДокСтрПод.Товар | ) as Подзапрос ON Подзапрос.Товар = $ДокСтр.Товар |WHERE | Жур.Date_Time_IDDoc BETWEEN :НачДата AND :КонДата~ | AND $Док.Клиент = :ГП | AND $Док.ПризнакНакладной = $Перечисление.ПризнПрихНакл.Закупка |ORDER BY Жур.Date_Time_IDDoc DESC |"; |
|||
15
Ёпрст
14.08.13
✎
11:51
|
(14) как бэ... всё в топку :)
|
|||
16
monsterZE
14.08.13
✎
11:52
|
(15) да?.. почему? =) вроде работает..
|
|||
17
monsterZE
14.08.13
✎
11:53
|
вот тока сортировку оставить как есть или вырезать до иддок?
|
|||
18
Ёпрст
14.08.13
✎
11:55
|
а чего "работает" ?
можешь выкинуть подзапрос и будет так же "работать" |
|||
19
monsterZE
14.08.13
✎
11:57
|
(18) а чего не работает?
запрос отсортированный обрезается по товару.. чего я не догоняю? |
|||
20
monsterZE
14.08.13
✎
12:04
|
(19) не, не обрезается =)
|
|||
21
monsterZE
14.08.13
✎
12:06
|
как же обрезать табличку с движухой по табличке с товаром?
|
|||
22
Ёпрст
14.08.13
✎
12:06
|
тебе же последние цены с прихода нужны были.. или нет ?
|
|||
23
dk
14.08.13
✎
12:08
|
запрос 3-этажный надо
1. получить список товар - док (максимум по дате) 2. получить товар - док (максимум по дате)- цена 3. основной запрос |
|||
24
monsterZE
14.08.13
✎
12:09
|
(22) да. но я потом в этой табличке еще рыться буду.. зачем мне там лишние строки?.. =\
|
|||
25
monsterZE
14.08.13
✎
12:16
|
(23) непонял
1. получить список товара отсорт. по дата-время почему сразу из него цену не достать? у меня сейчас получается табличка отсортированная и сжатая по товару.. отсортированную по сжатой обрезать никак? =) |
|||
26
dk
14.08.13
✎
12:18
|
(25) попробуй )
|
|||
27
monsterZE
14.08.13
✎
12:23
|
ну можно положить отсортированную в ВТ а потом из ВТ сделать селект top 1 для каждой позиции =) не, не должен быть способ заджойнить из таблицы только первую подходящую строку
|
|||
28
monsterZE
14.08.13
✎
12:23
|
Salimbek подкинь идею =)
|
|||
29
Ёпрст
14.08.13
✎
12:25
|
на вот, цены и товар с последних приходов.
|SELECT | $ДокСтр.Товар as [Товар $Справочник.Товары] | ,$ДокСтр.Цена as Цена |FROM | $ДокументСтроки.ПриходнаяНал as ДокСтр (NOLOCK) | | |inner join | (SELECT | $ДокСтрПод.Товар as Товар, | max(ЖурПод.Date_Time_IDDoc) as Date_Time_IDDoc | FROM | $ДокументСтроки.ПриходнаяНал as ДокСтрПод (NOLOCK) | INNER JOIN | $Документ.ПриходнаяНал as ДокПод (NOLOCK) ON ДокПод.IDDoc = ДокСтрПод.IDDoc | INNER JOIN | _1SJourn as ЖурПод (NOLOCK) ON ДокСтрПод.IDDoc = ЖурПод.IDDoc | WHERE | ЖурПод.Date_Time_IDDoc BETWEEN :НачДата AND :КонДата~ | and ЖурПод.iddocdef = $ВидДокумента.ПриходнаяНал | AND $ДокПод.Клиент = :ГП | AND $ДокПод.ПризнакНакладной = $Перечисление.ПризнПрихНакл.Закупка | GROUP BY $ДокСтрПод.Товар | ) as Подзапрос ON Подзапрос.Товар = $ДокСтр.Товар and ДокСтр.iddoc = right(Подзапрос.Date_Time_IDDoc,9) |"; |
|||
30
monsterZE
14.08.13
✎
12:28
|
(29) спасибо конечно =)
|
|||
31
monsterZE
14.08.13
✎
12:30
|
подзапрос выбирает товар с макс док_ид а основной просто весь товар из приходов? =)
|
|||
32
monsterZE
14.08.13
✎
12:32
|
и клеится по ид-док..
вобщем спасибо.. мог бы и на русском написать, я бы попробывал сам =) |
|||
33
Ёпрст
14.08.13
✎
12:36
|
(32) см. (5)
|
|||
34
Ёпрст
14.08.13
✎
12:37
|
(31) только основной выбирает не весь товар, а который подзапрос вернул.
|
|||
35
monsterZE
14.08.13
✎
12:39
|
(33) да, есть такое. =) сейчас понятно
|
|||
36
Stella0608
14.08.13
✎
14:13
|
А select top 1 with ties не пойдет? С сортировкой по дате документа. Не помню, в 1с такой конструкцией еще не пользовалась, но чисто в sql было дело.
|
|||
37
Ёпрст
14.08.13
✎
14:37
|
(36) ему несколько много товаров надо, а не 1
|
|||
38
monsterZE
14.08.13
✎
15:08
|
да, написал чего надо было - сказали спасибо. адресую его Епрст =)
выкриживали косячные доки по розничным точкам (доков оч. много и ассртимент огромный) недобросовестные - выписывали товар по приходной цене |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |