|
Группировка с условием в запросе | ☑ | ||
---|---|---|---|---|
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
|
как-то так. Всем спасибо за советы!)
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |