Имя: Пароль:
1C
1С v8
v8: SQL запрос - выбор строк с максимальной датой
,
0 lll52
 
18.05.12
11:41
Помогите пожалуйста с куском запроса. В запросе нужно отсечь строки с повторами документа и номера, где дата не максимальная.
Таблица имеет вид:
ссылка_на_документ / дата / стоимость / номенклатура

док 1 ------ дата1 ------ стоимость ---- номенклатура1
док 1 ------ дата2 ------ стоимость ---- номенклатура1
док 1 ------ дата3 ------ стоимость ---- номенклатура2
док 1 ------ дата1 ------ стоимость ---- номенклатура2
док 2 ------ дата1 ------ стоимость ---- номенклатура1
док 2 ------ дата2 ------ стоимость ---- номенклатура1

а должно получиться:
док 1 ------ дата1 ------ стоимость ---- номенклатура1
док 1 ------ дата3 ------ стоимость ---- номенклатура2
док 2 ------ дата1 ------ стоимость ---- номенклатура1

т.е. какая-то ОДНА дата и ОДНА стоимость соответственно.
реально в таблице данные по стоимости номенклатуры с учетом разных цен из регистра Цены - т.е. попали дублирующиеся строчки с разными датами и ценами.
1 lll52
 
18.05.12
11:42
>т.е. какая-то ОДНА дата и ОДНА стоимость соответственно.
для каждой номенклатуры в документе
2 lll52
 
18.05.12
11:52
Бьюсь над этим второй день. Что делалось :)
ВЫБРАТЬ РАЗЛИЧНЫЕ
   ЗаказНарядТовары.Ссылка КАК Ссылка,
   ЦеныСрезПоследних.Цена * ЗаказНарядТовары.Количество КАК СебестоимостьШтуки1,
   ЗаказНарядТовары.Номенклатура,
   ЦеныСрезПоследних.Период
ПОМЕСТИТЬ Табличка
ИЗ
   Документ.ЗаказНаряд.Товары КАК ЗаказНарядТовары
       ПОЛНОЕ СОЕДИНЕНИЕ РегистрСведений.Цены.СрезПоследних(, ТипЦен В (&ЦенаЗакупки)) КАК ЦеныСрезПоследних
       ПО ЗаказНарядТовары.Номенклатура = ЦеныСрезПоследних.Номенклатура
           И ЗаказНарядТовары.Ссылка.Дата >= ЦеныСрезПоследних.Период
ГДЕ
   ЗаказНарядТовары.Ссылка.Дата МЕЖДУ &Дата1 И &Дата2
   И ЗаказНарядТовары.Количество <> 0
   И ЦеныСрезПоследних.Цена <> 0

СГРУППИРОВАТЬ ПО
   ЦеныСрезПоследних.Номенклатура,
   ЗаказНарядТовары.Ссылка,
   ЦеныСрезПоследних.Цена * ЗаказНарядТовары.Количество,
   ЗаказНарядТовары.Номенклатура,
   ЦеныСрезПоследних.Период

//********************************************
ВЫБРАТЬ
   *
ИЗ
   Табличка КАК Табличка
//**********************************************

После этого получаю таблицу как описала выше. Делаю в консоли запросов, чтобы результат видеть.
3 qeos
 
18.05.12
11:55
группировка по документу с агрегатом максимум
4 Buster007
 
18.05.12
11:56
цена на номенклатуру не с характеристиками задаются?
5 Buster007
 
18.05.12
11:57
почему ПОЛНОЕ СОЕДИНЕНИЕ?
6 х86
 
18.05.12
11:57
МАКСИМУМ(Период)  предлагали?
7 Buster007
 
18.05.12
11:58
(3)(6) знатоки...
как вы думаете, что возвращает РегистрСведений.Цены.СрезПоследних?
8 Kashemir
 
18.05.12
12:00
А если 2 документа с одной датой:временем ?
9 lll52
 
18.05.12
12:04
(3) Я в этом направлении думала, наверное так и нужно, но пока не получилось. Вот прошу помощи. Могу конечно сюда свой код кинуть - но там чушня.
(4) Характеристик нет.
(5) Исправила не левое. Дубли остаются.
10 Kashemir
 
18.05.12
12:09
ВЫБРАТЬ
   Табличка.Ссылка,
   Табличка.СебестоимостьШтуки1,
   Табличка.Номенклатура,
   Табличка.Период
ИЗ
   Табличка КАК Табличка
ГДЕ
   Табличка.Период В
           (ВЫБРАТЬ
               МАКСИМУМ(МаксПериоды.Период) КАК Период
           ИЗ
               Табличка КАК МаксПериоды
           ГДЕ
               МаксПериоды.Ссылка = Табличка.Ссылка
               И МаксПериоды.Номенклатура = Табличка.Номенклатура)
11 Ursus maritimus
 
18.05.12
12:10
(10) Полная лажа
12 Kashemir
 
18.05.12
12:12
(11) Иди уроки учи, специалист.
13 Kashemir
 
18.05.12
12:12
Для тех, кто не знает что такое корреляционные запросы решение более понятное

ВЫБРАТЬ
   Табличка.Ссылка,
   Табличка.СебестоимостьШтуки1,
   Табличка.Номенклатура,
   Табличка.Период
ИЗ
   (ВЫБРАТЬ
       Табличка.Ссылка КАК Ссылка,
       Табличка.СебестоимостьШтуки1 КАК СебестоимостьШтуки1,
       Табличка.Номенклатура КАК Номенклатура,
       МАКСИМУМ(Табличка.Период) КАК Период
   ИЗ
       Табличка КАК Табличка
   
   СГРУППИРОВАТЬ ПО
       Табличка.Номенклатура,
       Табличка.Ссылка,
       Табличка.СебестоимостьШтуки1) КАК ВложенныйЗапрос
       ВНУТРЕННЕЕ СОЕДИНЕНИЕ Табличка КАК Табличка
       ПО ВложенныйЗапрос.Ссылка = Табличка.Ссылка
           И ВложенныйЗапрос.Номенклатура = Табличка.Номенклатура
14 Kashemir
 
18.05.12
12:14
+(13) Плюс собственно соединение по периоду "И ВложенныйЗапрос.Период = Табличка.Период"
15 Kashemir
 
18.05.12
12:15
+(13)(14)

ВЫБРАТЬ
   Табличка.Ссылка,
   Табличка.СебестоимостьШтуки1,
   Табличка.Номенклатура,
   Табличка.Период
ИЗ
   (ВЫБРАТЬ
       Табличка.Ссылка КАК Ссылка,
       Табличка.Номенклатура КАК Номенклатура,
       МАКСИМУМ(Табличка.Период) КАК Период
   ИЗ
       Табличка КАК Табличка
   
   СГРУППИРОВАТЬ ПО
       Табличка.Номенклатура,
       Табличка.Ссылка) КАК ВложенныйЗапрос
       ВНУТРЕННЕЕ СОЕДИНЕНИЕ Табличка КАК Табличка
       ПО ВложенныйЗапрос.Ссылка = Табличка.Ссылка
           И ВложенныйЗапрос.Номенклатура = Табличка.Номенклатура
           И ВложенныйЗапрос.Период = Табличка.Период
16 Ursus maritimus
 
18.05.12
12:17
(15) Это уже более похоже на правду
17 lll52
 
18.05.12
12:18
(10) и (15) Вот этот вариант, на тех наборах, что я обычно проверяю - дал правильный разультат.
Спасибо.
Kashemir, может посоветуете что почитать по SQL запросам в 1С?
18 Ursus maritimus
 
18.05.12
12:18
Вот правильный ответ:
"ВЫБРАТЬ
|    Табличка.Ссылка КАК Ссылка,
|    Табличка.Номенклатура,
|    МАКСИМУМ(Табличка.Период) КАК Период
|ПОМЕСТИТЬ МаксимальныеДаты
|ИЗ
|    Табличка КАК Табличка
|
|СГРУППИРОВАТЬ ПО
|    Табличка.Ссылка,
|    Табличка.Номенклатура
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
|    Табличка.Ссылка КАК Ссылка,
|    Табличка.СебестоимостьШтуки1,
|    Табличка.Номенклатура,
|    Табличка.Период КАК Период
|ИЗ
|    Табличка КАК Табличка
|        ВНУТРЕННЕЕ СОЕДИНЕНИЕ МаксимальныеДаты КАК МаксимальныеДаты
|        ПО Табличка.Ссылка = МаксимальныеДаты.Ссылка
|            И Табличка.Номенклатура = МаксимальныеДаты.Номенклатура
|            И Табличка.Период = МаксимальныеДаты.Период"
19 Kashemir
 
18.05.12
12:21
(16) Прежде чем делать громкие заявления, попробуй хотя бы проверить.
20 Kashemir
 
18.05.12
12:23
(17) Что-то конкретное не посоветую. Литературы более достаточно.
21 Ursus maritimus
 
18.05.12
12:23
(19) Чего проверять? В (10) полная лажа. Видно невооруженным взглядом. В (15) кривоопо, но работать будет
22 Kashemir
 
18.05.12
12:25
(21) Мда, тяжелый случай. Обратись к старшим товарищам с вопросом что такое корреляционные запросы - пусть тебя просветят.