|   |   | 
| 
 | Группировка с условием в запросе | ☑ | ||
|---|---|---|---|---|
| 0
    
        dredd_semsk 07.10.22✎ 13:50 | 
        Добрый день, всем! Подскажите плж как можно решить след задачу:
 КоличествоSellOut _SUFactor _Штрихкод _ДатаАктивации 2 0,0556 3014260104757 01.10.2019 0:00:00 2 0,0555 3014260104757 01.08.2021 0:00:00 1 0,0655 3014260104757 01.04.2021 0:00:00 Как можно сгруппировать строки так, чтобы _SUFactor суммировался по самой свежей датой активаций? т.е. 0,555+0,555+0,555(так как у 0,555 самая свежая дата активации, остальные значения заменяются ею ) | |||
| 1
    
        Asmody 07.10.22✎ 13:54 | 
        МАКСИМУМ(_ДатаАктивации) - это что ли?     | |||
| 2
    
        PR 07.10.22✎ 13:55 | 
        (0) Левое соединение с таблицей, сгруппированной по максимальному значению
 Только нужно учесть, что максимальных значений может быть > 1 | |||
| 3
    
        Garykom гуру 07.10.22✎ 14:06 | 
        (0) Добавить и заполнить колонку-поле для группировки     | |||
| 4
    
        Garykom гуру 07.10.22✎ 14:06 | 
        (2) а соединять по чему будешь?     | |||
| 5
    
        dredd_semsk 07.10.22✎ 14:10 | 
        (4) по штрихкоду     | |||
| 6
    
        Йохохо 07.10.22✎ 14:14 | 
        сумма(суфактор), максиму(шк)     | |||
| 7
    
        Йохохо 07.10.22✎ 14:14 | 
        _датаактивации     | |||
| 8
    
        lite777 07.10.22✎ 14:17 | 
        МАКСИМУМ(_ДатаАктивации) * КоличеситвоЗаписейВТабл     | |||
| 9
    
        lite777 07.10.22✎ 14:19 | 
        Выбрать первые 1
 МАКСИМУМ(_ДатаАктивации) SUFactor*КолЗаписей | |||
| 10
    
        dredd_semsk 07.10.22✎ 14:19 | 
        (7) в твоем варианте, он же просто суммирует суфактор, т.е. 0,0556+0,0555+0,0655 а надо чтобы 0,0555+0,0555+0,0555     | |||
| 11
    
        dredd_semsk 07.10.22✎ 14:19 | 
        (9) интересный вариант, вечером попробую и отпишусь     | |||
| 12
    
        Garykom гуру 07.10.22✎ 14:58 | 
        два подзапроса в итоге и соединить их     | |||
| 13
    
        Said_We 07.10.22✎ 17:18 | 
        (0) Если не 1С, то можно добавить колонку с самой свежей датой в разрезе штрих кода, а потом из неё сумму посчитать. В итоге будет для каждой строки и текущая _SUFactor и необходимая сумма по всем строкам, но в каждой строке.
 Примерно так: SELECT t.КоличествоSellOut, t._SUFactor, t._Штрихкод, t._ДатаАктивации, t.new_SUFactor, sum(t.new_SUFactor) over(partition by t._Штрихкод) as SUM_new_SUFactor from (SELECT t1.КоличествоSellOut, t1._SUFactor, t1._Штрихкод, t1._ДатаАктивации, (select top 1 t2._SUFactor from ИмяТаблицы as t2 where t1._Штрихкод = t2._Штрихкод order by t2._ДатаАктивации desc ) as new_SUFactor from ИмяТаблицы as t1) as t | |||
| 14
    
        Said_We 07.10.22✎ 17:30 | 
        К (13)
 new_SUFactor - это значение самой свежего значения (определяется по _ДатаАктивации) поля _SUFactor в разрезе штрих кода поле _Штрихкод. SUM_new_SUFactor - это сумма всех значений нового поля new_SUFactor в разрезе штрихкода. В итоге получим примерно такую таблицу: КоличествоSellOut _SUFactor _Штрихкод _ДатаАктивации new_SUFactor SUM_new_SUFactor 2 0,0556 3014260104757 01.10.2019 0:00:00 0,0555 0,1665 2 0,0555 3014260104757 01.08.2021 0:00:00 0,0555 0,1665 1 0,0655 3014260104757 01.04.2021 0:00:00 0,0555 0,1665 | |||
| 15
    
        Said_We 07.10.22✎ 18:05 | 
        (0) Если же 1С, то алгоритм примерно следующий:
 1. Получить таблицу для каждого штрихкода с максимальной датой и прицепить её по штрих коду к исходной таблице. 2. К таблице полученной на первом этапе прицепить значение _SUFactor из исходной таблицы и назвать его как new_SUFactor по штрих коду и дате. 3. Из таблицы, полученной на третьем этапе получить таблицу с штрих кодом и суммой колонки new_SUFactor. Это либо то что нужно (итоговый результат же не показан в (0)), либо перейти к 4-му этапу. 4. Прицепить к таблице, полученной на втором этапе таблицу, полученную на третьем этапе по штрих коду. | |||
| 16
    
        Said_We 08.10.22✎ 01:13 | 
        (11) вечер пятница... попробую... да да :-)     | |||
| 17
    
        Said_We 09.10.22✎ 16:13 | 
        (0) Итоговую таблицу нарисуй, которую получить необходимо.     | |||
| 18
    
        Said_We 09.10.22✎ 18:17 | 
        К (15) В общем если в 1С, то задача сведется либо к куче подзапросов к одной и той же таблице или куча временных таблиц на основе одной и той же исходной таблицы.
 И тот и тот вариант получится мало читаемый код. С временными таблицами более читабельный, но если исходная таблица на десяток миллионов записей, то ресурсы будут жраться огромными порциями. Как говориться выбирай из двух плохих вариантов. | |||
| 19
    
        Said_We 10.10.22✎ 16:44 | 
        (0) Вопрос снят?     | |||
| 20
    
        dredd_semsk 11.10.22✎ 06:49 | 
        (19) ничего себе, какое развернутое решение. Сегодня приступаю - отпишусь!     | |||
| 21
    
        dredd_semsk 11.10.22✎ 06:49 | 
        (16) ))))     | |||
| 22
    
        dredd_semsk 11.10.22✎ 06:50 | 
        (18) не миллионы, но сотни тысяч     | |||
| 23
    
        Said_We 11.10.22✎ 10:17 | 
        (22) Хоть напиши 1С это или нет. Названия колонок на смешанном языке.
 Нарисуй какая таблица должна быть на выходе. | |||
| 24
    
        mistеr 11.10.22✎ 10:33 | 
        (0) 1. Группируем, находим последнюю дату и количество строк.
 2. Соединяем с исходной таблицей, находим строку(и) с последней датой, считаем. | |||
| 25
    
        dredd_semsk 11.10.22✎ 11:10 | 
        (23) 1c     | |||
| 26
    
        dredd_semsk 11.10.22✎ 11:11 | 
        (23) 
 КоличествоSellOut _SUFactor _Штрихкод _ДатаАктивации 5 0,0555 3014260104757 01.08.2021 0:00:00 | |||
| 27
    
        dredd_semsk 11.10.22✎ 11:13 | 
        (26) Поправка
 КоличествоSellOut _SUFactor _Штрихкод _ДатаАктивации 5 0,1665 3014260104757 01.08.2021 0:00:00 | |||
| 28
    
        dredd_semsk 13.10.22✎ 14:25 | 
        (23) 
 ВЫБРАТЬ Номенклатура._Штрихкод КАК _Штрихкод, МАКСИМУМ(ВЫБОР КОГДА Номенклатура._ДатаАктивации = ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0) ТОГДА ДАТАВРЕМЯ(2015, 2, 28, 23, 59, 59) ИНАЧЕ Номенклатура._ДатаАктивации КОНЕЦ) КАК _ДатаАктивации, СУММА(1) КАК КолЗаписей ПОМЕСТИТЬ ВТ ИЗ Справочник.Номенклатура КАК Номенклатура ГДЕ Номенклатура._Штрихкод = &_Штрихкод СГРУППИРОВАТЬ ПО Номенклатура._Штрихкод ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ ВТ._Штрихкод КАК _Штрихкод, ВТ._ДатаАктивации КАК _ДатаАктивации, ВТ.КолЗаписей КАК КолЗаписей, ВТ.КолЗаписей * Номенклатура._SUFactor КАК СуммаСУфакторов ИЗ Справочник.Номенклатура КАК Номенклатура ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТ КАК ВТ ПО (ВТ._ДатаАктивации = Номенклатура._ДатаАктивации) И (ВТ._Штрихкод = Номенклатура._Штрихкод) | |||
| 29
    
        dredd_semsk 13.10.22✎ 14:26 | 
        как-то так. Всем спасибо за советы!)     | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |