|
Получить количество дней без продаж | ☑ | ||
---|---|---|---|---|
0
Karambol
19.06.13
✎
11:07
|
Добрый день!
УТ 10.3. Как получить максимальное количество дней без продаж по конкретному товару. Я вижу только такой вариант: сформировать таблицу с поступлениями/продажами и ее обрабатывать программно. Можно ли прямо в запросе рассчитать? |
|||
1
Deon
19.06.13
✎
11:10
|
посчитать кол-во дней, когда товар продавался
|
|||
2
Рэйв
19.06.13
✎
11:17
|
(0)Как вариант
Получи запросом дни когда были продажи товара, закинь в тз. Потом добавь колонку, пройдись по тз и для каждой строки получи разницу в днях между тек. строкой и следующей. Потом стсортируешь по убыванию и в первой строке получишь максимум |
|||
3
ukolabrother
19.06.13
✎
11:19
|
выбрать из графика все дни, убрать дни с продажами
|
|||
4
Нуф-Нуф
19.06.13
✎
11:29
|
ВЫБРАТЬ
ПродажиОбороты.Номенклатура КАК Номенклатура, НАЧАЛОПЕРИОДА(ПродажиОбороты.Период, ДЕНЬ) КАК Период, ПродажиОбороты.КоличествоОборот КАК Количество ПОМЕСТИТЬ ТаблицаПродаж ИЗ РегистрНакопления.Продажи.Обороты(, , День, Номенклатура = &Номенклатура) КАК ПродажиОбороты ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ ТаблицаПродаж.Номенклатура, ТаблицаПродаж.Период, МИНИМУМ(ВЫБОР КОГДА РАЗНОСТЬДАТ(ТаблицаПродаж.Период, ТаблицаПродажДляСоединения.Период, ДЕНЬ) >= 0 ТОГДА РАЗНОСТЬДАТ(ТаблицаПродаж.Период, ТаблицаПродажДляСоединения.Период, ДЕНЬ) ИНАЧЕ РАЗНОСТЬДАТ(ТаблицаПродажДляСоединения.Период, ТаблицаПродаж.Период, ДЕНЬ) КОНЕЦ) КАК Разница ПОМЕСТИТЬ ТаблицаРазницыДней ИЗ ТаблицаПродаж КАК ТаблицаПродаж, ТаблицаПродаж КАК ТаблицаПродажДляСоединения ГДЕ ВЫБОР КОГДА РАЗНОСТЬДАТ(ТаблицаПродаж.Период, ТаблицаПродажДляСоединения.Период, ДЕНЬ) >= 0 ТОГДА РАЗНОСТЬДАТ(ТаблицаПродаж.Период, ТаблицаПродажДляСоединения.Период, ДЕНЬ) ИНАЧЕ РАЗНОСТЬДАТ(ТаблицаПродажДляСоединения.Период, ТаблицаПродаж.Период, ДЕНЬ) КОНЕЦ > 0 СГРУППИРОВАТЬ ПО ТаблицаПродаж.Номенклатура, ТаблицаПродаж.Период ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ ТаблицаРазницыДней.Номенклатура, МАКСИМУМ(ТаблицаРазницыДней.Разница) КАК Разница ИЗ ТаблицаРазницыДней КАК ТаблицаРазницыДней СГРУППИРОВАТЬ ПО ТаблицаРазницыДней.Номенклатура |
|||
5
Нуф-Нуф
19.06.13
✎
11:29
|
с вас 2000 руб.
|
|||
6
zak555
19.06.13
✎
11:34
|
(4) это если товар хоть один раз продавался за период
|
|||
7
Нуф-Нуф
19.06.13
✎
11:39
|
(6)
ВЫБРАТЬ ПродажиОбороты.Номенклатура КАК Номенклатура, НАЧАЛОПЕРИОДА(ПродажиОбороты.Период, ДЕНЬ) КАК Период, ПродажиОбороты.КоличествоОборот КАК Количество ПОМЕСТИТЬ ТаблицаПродаж ИЗ РегистрНакопления.Продажи.Обороты(&НачалоПериода, &ОкончаниеПериода, День, Номенклатура = &Номенклатура) КАК ПродажиОбороты ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ &Номенклатура, НАЧАЛОПЕРИОДА(&НачалоПериода, ДЕНЬ), 1 ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ &Номенклатура, НАЧАЛОПЕРИОДА(&ОкончаниеПериода, ДЕНЬ), 1 ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ ТаблицаПродаж.Номенклатура, ТаблицаПродаж.Период, МИНИМУМ(ВЫБОР КОГДА РАЗНОСТЬДАТ(ТаблицаПродаж.Период, ТаблицаПродажДляСоединения.Период, ДЕНЬ) >= 0 ТОГДА РАЗНОСТЬДАТ(ТаблицаПродаж.Период, ТаблицаПродажДляСоединения.Период, ДЕНЬ) ИНАЧЕ РАЗНОСТЬДАТ(ТаблицаПродажДляСоединения.Период, ТаблицаПродаж.Период, ДЕНЬ) КОНЕЦ) КАК Разница ПОМЕСТИТЬ ТаблицаРазницыДней ИЗ ТаблицаПродаж КАК ТаблицаПродаж, ТаблицаПродаж КАК ТаблицаПродажДляСоединения ГДЕ ВЫБОР КОГДА РАЗНОСТЬДАТ(ТаблицаПродаж.Период, ТаблицаПродажДляСоединения.Период, ДЕНЬ) >= 0 ТОГДА РАЗНОСТЬДАТ(ТаблицаПродаж.Период, ТаблицаПродажДляСоединения.Период, ДЕНЬ) ИНАЧЕ РАЗНОСТЬДАТ(ТаблицаПродажДляСоединения.Период, ТаблицаПродаж.Период, ДЕНЬ) КОНЕЦ > 0 СГРУППИРОВАТЬ ПО ТаблицаПродаж.Номенклатура, ТаблицаПродаж.Период ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ ТаблицаРазницыДней.Номенклатура, МАКСИМУМ(ТаблицаРазницыДней.Разница) КАК Разница ИЗ ТаблицаРазницыДней КАК ТаблицаРазницыДней СГРУППИРОВАТЬ ПО ТаблицаРазницыДней.Номенклатура |
|||
8
Csar
19.06.13
✎
11:40
|
Можно пояснить раздел?
ВЫБРАТЬ ТаблицаПродаж.Номенклатура, ТаблицаПродаж.Период, МИНИМУМ(ВЫБОР КОГДА РАЗНОСТЬДАТ(ТаблицаПродаж.Период, ТаблицаПродажДляСоединения.Период, ДЕНЬ) >= 0 ТОГДА РАЗНОСТЬДАТ(ТаблицаПродаж.Период, ТаблицаПродажДляСоединения.Период, ДЕНЬ) ИНАЧЕ РАЗНОСТЬДАТ(ТаблицаПродажДляСоединения.Период, ТаблицаПродаж.Период, ДЕНЬ) КОНЕЦ) КАК Разница ПОМЕСТИТЬ ТаблицаРазницыДней ИЗ ТаблицаПродаж КАК ТаблицаПродаж, ТаблицаПродаж КАК ТаблицаПродажДляСоединения Тут из ВТ ТаблицаПродаж перебираются все даты и создается выборка с минимумом дней простоя по отношению к каждому дня продажи? |
|||
9
Нуф-Нуф
19.06.13
✎
11:50
|
(8) да. мы для каждой даты продажи получаем варианты со всеми датами, получаем разницу с этими вариантами, и выбираем минимальную (т.е. для каждой даты продажи получаем разницу дней до ближайшей к ней дате продажи)
|
|||
10
Csar
19.06.13
✎
12:02
|
(9) оригинально
|
|||
11
IamAlexy
19.06.13
✎
12:02
|
(0) найти последнюю дату продажи и посчитать количество дней между оной и нужной ?
|
|||
12
Csar
19.06.13
✎
12:04
|
(11) так это ты ерунду получишь
|
|||
13
zak555
19.06.13
✎
12:17
|
(4) зачем тебе выбор в выборке и в условии ?
|
|||
14
Нуф-Нуф
19.06.13
✎
12:19
|
(13) потому что мне нужно получить разницу для каждой записи. и получить только те записи, для которой разница больше 0.
хотя при умножении таблиц можно было поставить условие по неравенству дат (чтобы избежать 0 в принципе). хз что лучше |
|||
15
zak555
19.06.13
✎
12:20
|
(14) достаточно было бы
указать ВЫБРАТЬ РАЗНОСТЬДАТ(ТаблицаПродаж.Период, ТаблицаПродажДляСоединения.Период, ДЕНЬ) .... ГДЕ РАЗНОСТЬДАТ(ТаблицаПродаж.Период, ТаблицаПродажДляСоединения.Период, ДЕНЬ) > 0 |
|||
16
zak555
19.06.13
✎
12:22
|
хотя равесто лучше отсевать в соединении
ТаблицаПродаж ВНУТРЕННЕЕ СОЕДИНЕНИЕ ТаблицаПродажДляСоединения ПО ТаблицаПродаж.Период <> ТаблицаПродажДляСоединения.Период |
|||
17
Нуф-Нуф
19.06.13
✎
12:30
|
(15) ты получишь не все разницы дат. так как разница может быть и отрицательно
(16) если таблица будет большая, то условие на неравенство при умножении таблиц возможно будет не самым лучшим вариантом |
|||
18
zak555
19.06.13
✎
12:32
|
(17)
1. я их отсеиваю, т.к. они мне не интересны 2. это надо проверять |
|||
19
Нуф-Нуф
19.06.13
✎
12:34
|
(18) кстати да. точно. отрицательные даты - это тоже самое что и положительные :)))) только полученные другим вычислением Большее-Меньшее и Меньшее-Большее.
Да, ты прав. можно выбор убрать и в условии просто >0 |
|||
20
zak555
19.06.13
✎
12:44
|
(7) смотри товар, который не продавался
с 01.01 по 31.01 => у тебя выведет количество 30 дней, что неправильно =))) |
|||
21
Нуф-Нуф
19.06.13
✎
12:58
|
(20) почему?
|
|||
22
zak555
19.06.13
✎
13:13
|
(21) сколько будет по-твоему ?
|
|||
23
zak555
19.06.13
✎
16:41
|
вот надо было
ВЫБРАТЬ ПродажиОбороты.Номенклатура, НАЧАЛОПЕРИОДА(ПродажиОбороты.Период, ДЕНЬ) КАК ДеньПродажи ПОМЕСТИТЬ ТаблицаПродаж ИЗ РегистрНакопления.Продажи.Обороты(&Дата1, &Дата2, День, Номенклатура В (&Номенклатура)) КАК ПродажиОбороты ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ ТаблицаПродаж.Номенклатура КАК Номенклатура, НАЧАЛОПЕРИОДА(&Дата1, ДЕНЬ) КАК ДеньПродажи ПОМЕСТИТЬ ТаблицаПродажПолная ИЗ ТаблицаПродаж КАК ТаблицаПродаж ОБЪЕДИНИТЬ ВЫБРАТЬ ТаблицаПродаж.Номенклатура, ТаблицаПродаж.ДеньПродажи ИЗ ТаблицаПродаж КАК ТаблицаПродаж ОБЪЕДИНИТЬ ВЫБРАТЬ ТаблицаПродаж.Номенклатура, НАЧАЛОПЕРИОДА(&Дата2, ДЕНЬ) ИЗ ТаблицаПродаж КАК ТаблицаПродаж ИНДЕКСИРОВАТЬ ПО Номенклатура, ДеньПродажи ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ ТаблицаПродажПолная1.Номенклатура, МАКСИМУМ(РАЗНОСТЬДАТ(ТаблицаПродажПолная1.ДеньПродажи, ТаблицаПродажПолная2.ДеньПродажи, ДЕНЬ)) КАК КоличествоДнейМеждуПродажами ИЗ ТаблицаПродажПолная КАК ТаблицаПродажПолная1 ВНУТРЕННЕЕ СОЕДИНЕНИЕ ТаблицаПродажПолная КАК ТаблицаПродажПолная2 ПО ТаблицаПродажПолная1.ДеньПродажи <> ТаблицаПродажПолная2.ДеньПродажи ГДЕ РАЗНОСТЬДАТ(ТаблицаПродажПолная1.ДеньПродажи, ТаблицаПродажПолная2.ДеньПродажи, ДЕНЬ) > 0 СГРУППИРОВАТЬ ПО ТаблицаПродажПолная1.Номенклатура |
|||
24
Нуф-Нуф
19.06.13
✎
16:46
|
(23) а сам пробовал его выполнить?
|
|||
25
Aprobator
19.06.13
✎
16:52
|
(23) фигня откровенная.
|
|||
26
zak555
19.06.13
✎
16:55
|
(24) не работает ?
(25) в чём ? |
|||
27
Нуф-Нуф
19.06.13
✎
16:55
|
(24) не работает
|
|||
28
Aprobator
19.06.13
✎
16:59
|
(26) дни без продаж между двумя ближайшими продажами. А у тебя что? Макисмальная разница между ДЮБЫМИ различными датами продажи под данной номенклатуре.
|
|||
29
Aprobator
19.06.13
✎
17:00
|
блин - чего то пальцы по клавиатуре попадают криво )
|
|||
30
zak555
20.06.13
✎
12:34
|
да, ошибся, надо было так :
ВЫБРАТЬ ПродажиОбороты.Номенклатура, НАЧАЛОПЕРИОДА(ПродажиОбороты.Период, ДЕНЬ) КАК ДеньПродажи ПОМЕСТИТЬ ТаблицаПродаж ИЗ РегистрНакопления.Продажи.Обороты(&Дата1, &Дата2, День, Номенклатура В (&Номенклатура)) КАК ПродажиОбороты ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ ТаблицаПродаж.Номенклатура КАК Номенклатура, ТаблицаПродаж.ДеньПродажи КАК ДеньПродажи ПОМЕСТИТЬ ТаблицаПродажПолная ИЗ ТаблицаПродаж КАК ТаблицаПродаж ОБЪЕДИНИТЬ ВЫБРАТЬ ТаблицаПродаж.Номенклатура, НАЧАЛОПЕРИОДА(&Дата1, ДЕНЬ) ИЗ ТаблицаПродаж КАК ТаблицаПродаж ОБЪЕДИНИТЬ ВЫБРАТЬ ТаблицаПродаж.Номенклатура, НАЧАЛОПЕРИОДА(&Дата2, ДЕНЬ) ИЗ ТаблицаПродаж КАК ТаблицаПродаж ИНДЕКСИРОВАТЬ ПО Номенклатура, ДеньПродажи ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ ВложенныйЗапрос.Номенклатура, МАКСИМУМ(ВложенныйЗапрос.КолДней) КАК КолДней ИЗ (ВЫБРАТЬ ТаблицаПродажПолная1.Номенклатура КАК Номенклатура, ТаблицаПродажПолная1.ДеньПродажи КАК ДеньПродажи, МИНИМУМ(РАЗНОСТЬДАТ(ТаблицаПродажПолная1.ДеньПродажи, ТаблицаПродажПолная2.ДеньПродажи, ДЕНЬ)) КАК КолДней ИЗ ТаблицаПродажПолная КАК ТаблицаПродажПолная1 ЛЕВОЕ СОЕДИНЕНИЕ ТаблицаПродажПолная КАК ТаблицаПродажПолная2 ПО ТаблицаПродажПолная1.Номенклатура = ТаблицаПродажПолная2.Номенклатура И ТаблицаПродажПолная1.ДеньПродажи <> ТаблицаПродажПолная2.ДеньПродажи ГДЕ РАЗНОСТЬДАТ(ТаблицаПродажПолная1.ДеньПродажи, ТаблицаПродажПолная2.ДеньПродажи, ДЕНЬ) > 0 СГРУППИРОВАТЬ ПО ТаблицаПродажПолная1.Номенклатура, ТаблицаПродажПолная1.ДеньПродажи) КАК ВложенныйЗапрос СГРУППИРОВАТЬ ПО ВложенныйЗапрос.Номенклатура |
|||
31
zak555
20.06.13
✎
12:50
|
хотя
ТаблицаПродажПолная1.ДеньПродажи <> ТаблицаПродажПолная2.ДеньПродажи лучше заменить на ТаблицаПродажПолная1.ДеньПродажи <= ТаблицаПродажПолная2.ДеньПродажи |
|||
32
GANR
20.06.13
✎
12:58
|
(0) > Можно ли прямо в запросе
Да, можно, для этого нужно 1. Сгенерировать последоватьельность дат с периодичностью ДЕНЬ. В этом поможет Книга знаний: Генерация числовой последовательности и последовательности дат при помощи языка запросов. 2. Соединить п.1 с таблицей продаж по дням по условию на товар и на дату. 3. Ввести поле сумма(выбор когда [п.2].Период есть null тогда 1 иначе 0 конец) Все понятно? |
|||
33
GANR
20.06.13
✎
13:00
|
(32) А хотя можно и проще - вычесть количество дней, когда продажи были из общего количества дней в периоде - тогда и мудрить ничего не надо. (0) Забей на (32) - читай настоящее сообщение, эта идея перспективнее.
|
|||
34
Aprobator
20.06.13
✎
14:24
|
(30) опять мимо кассы.
|
|||
35
Aprobator
20.06.13
✎
14:26
|
хотя, при условии в (31) сработает.
|
|||
36
zak555
20.06.13
✎
14:47
|
(34) сработает и так, и так (35)
|
|||
37
zak555
20.06.13
✎
14:53
|
условие (31) можно и вовсе убрать
|
|||
38
dk
20.06.13
✎
15:02
|
небольшой взброс:
надо еще учитывать чтобы товар был на остатках т.е. смотреть отсутствие продаж при наличии на складе ) |
|||
39
Aprobator
20.06.13
✎
15:06
|
(37) *почесав немного репу* - вообще да, согласен. Сработает и так и так.
|
|||
40
V_V_V
20.06.13
✎
15:11
|
А слабо выходные убрать? :)
|
|||
41
zak555
20.06.13
✎
15:17
|
(38) интересует факт продажи
|
|||
42
zak555
20.06.13
✎
15:17
|
(40) зачем ?
|
|||
43
dk
20.06.13
✎
15:19
|
(41) в (0) написано про отсутствие продаж
|
|||
44
zak555
20.06.13
✎
15:21
|
(43) так в (30) для тех, кто хотя бы один раз продавался
если нужно дополнить -- то вт правое соединение есть нул |
|||
45
zak555
20.06.13
✎
15:24
|
и его дополняем
РАЗНОСТЬДАТ(&Дата2, &Дата1, ДЕНЬ) + 86400 |
|||
46
dk
20.06.13
✎
15:28
|
(44) остатки прикрутить легко тока на словах )
|
|||
47
zak555
20.06.13
✎
15:29
|
(46) причём тут остатки ?
ты же говоришь, что нужно добавить в результат те, номенклатуры, которые не продавались ? |
|||
48
dk
20.06.13
✎
15:30
|
не продавались, но БЫЛИ на остатках
|
|||
49
zak555
20.06.13
✎
16:34
|
(48) про это точно ни слова =)
|
|||
50
zak555
24.06.13
✎
08:11
|
автор пропал
|
|||
51
zak555
24.06.13
✎
22:07
|
кстати, как лучше ускорить (30) и (31) ?
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |