|
запрос: вместо МАКСИМУМ выбирается СУММА | ☑ | ||
---|---|---|---|---|
0
grayshadow
29.05.13
✎
14:09
|
Задача - посчитать валовую прибыль по месяцам и из этого выбрать максимальное значение прибыли. Текст запроса:
ВЫБРАТЬ РАЗРЕШЕННЫЕ ПродажиОбороты.Контрагент, ПродажиОбороты.СтоимостьОборот КАК СтоимостьОборот, ПродажиОбороты.Период КАК Период ПОМЕСТИТЬ ВТПродажиИСебестоимость ИЗ РегистрНакопления.Продажи.Обороты(, , Месяц, ) КАК ПродажиОбороты ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ ПродажиСебестоимостьОбороты.ЗаказПокупателя.Контрагент, СУММА(-1 * ПродажиСебестоимостьОбороты.СтоимостьОборот), ПродажиСебестоимостьОбороты.Период ИЗ РегистрНакопления.ПродажиСебестоимость.Обороты(, , Месяц, ) КАК ПродажиСебестоимостьОбороты СГРУППИРОВАТЬ ПО ПродажиСебестоимостьОбороты.ЗаказПокупателя.Контрагент, ПродажиСебестоимостьОбороты.Период ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ ВТПродажиИСебестоимость.Контрагент КАК Контрагент, СУММА(ВТПродажиИСебестоимость.СтоимостьОборот) КАК СтоимостьОборот, ВТПродажиИСебестоимость.Период КАК Период ПОМЕСТИТЬ ВТПродССПоМес ИЗ ВТПродажиИСебестоимость КАК ВТПродажиИСебестоимость СГРУППИРОВАТЬ ПО ВТПродажиИСебестоимость.Контрагент, ВТПродажиИСебестоимость.Период ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ ВТПродССПоМес.Контрагент КАК Контрагент, МАКСИМУМ(ВТПродССПоМес.СтоимостьОборот) КАК СтоимостьОборот ИЗ ВТПродССПоМес КАК ВТПродССПоМес СГРУППИРОВАТЬ ПО ВТПродССПоМес.Контрагент вот результат предпоследнего запроса (ВТПродССПоМес) по одному из контрагентов: 01.11.2012 0:00:00 18 951.2 01.12.2012 0:00:00 75 252.2 01.01.2013 0:00:00 234 187.32 01.02.2013 0:00:00 36 883.3 01.03.2013 0:00:00 148 852.93 01.04.2013 0:00:00 252 189.17 01.05.2013 0:00:00 33 576.7 и последний запрос выбирает сумму этих цифр - 799 892.82 Ставила разные агрегатные функции - максимум, минимум, среднее, ВСЕ РАВНО всегда 799 892,82. Что бы это значило? о_О |
|||
1
mikecool
29.05.13
✎
14:11
|
у тебя в последнем запросе уже уникальные записи с просуммированными значениями, смотри предыдущий результат
|
|||
2
Maxus43
29.05.13
✎
14:12
|
да и в выборке контрагент, а не период как представлено
|
|||
3
salvator
29.05.13
✎
14:12
|
(0) Это не может быть результатом предпоследнего запроса. Где контрагент?
|
|||
4
grayshadow
29.05.13
✎
14:13
|
в предпоследней ВТ есть контрагент, я его убрала, потому что ето ж коммерческая тайна:)
|
|||
5
grayshadow
29.05.13
✎
14:14
|
оке, так:
ООО Рога и Копыта 01.11.2012 0:00:00 18 951.2 ООО Рога и Копыта 01.12.2012 0:00:00 75 252.2 ООО Рога и Копыта 01.01.2013 0:00:00 234 187.32 ООО Рога и Копыта 01.02.2013 0:00:00 36 883.3 ООО Рога и Копыта 01.03.2013 0:00:00 148 852.93 ООО Рога и Копыта 01.04.2013 0:00:00 252 189.17 ООО Рога и Копыта 01.05.2013 0:00:00 33 576.7 |
|||
6
mikecool
29.05.13
✎
14:14
|
смотри (1)
|
|||
7
grayshadow
29.05.13
✎
14:15
|
теперь мне надо получить
ООО Рога и Копыта 01.04.2013 0:00:00 252 189.17 а получается ООО Рога и Копыта 01.04.2013 0:00:00 799 892.82 |
|||
8
grayshadow
29.05.13
✎
14:15
|
конечно, без периода:) сорри
|
|||
9
mikecool
29.05.13
✎
14:16
|
а, ну ладно , я не против, получай
|
|||
10
salvator
29.05.13
✎
14:17
|
Что написала, то и получила.
|
|||
11
grayshadow
29.05.13
✎
14:17
|
а почему вот это не работает:
МАКСИМУМ(ВТПродССПоМес.СтоимостьОборот) КАК СтоимостьОборот ?:) |
|||
12
Лефмихалыч
29.05.13
✎
14:18
|
(7) потому, что 799892.82 - это оборот за какой-то месяц, какого-то года, но не 2013-го
|
|||
13
salvator
29.05.13
✎
14:18
|
Про группировки почитай.
|
|||
14
mikecool
29.05.13
✎
14:19
|
(11) потому что это какой то бесполезный налор букв
|
|||
15
mikecool
29.05.13
✎
14:19
|
набор*
|
|||
16
Mitriy
29.05.13
✎
14:19
|
потому что работает вот это:
СУММА(ВТПродажиИСебестоимость.СтоимостьОборот) КАК СтоимостьОборот |
|||
17
grayshadow
29.05.13
✎
14:20
|
(7) я привела ВСЕ данные по ООО Рога и Копыта, в других месяцах по нему нет продаж
|
|||
18
Лефмихалыч
29.05.13
✎
14:22
|
Короче, последний запрос надо, как минимум вот так переписать:
и всё зашибётся |
|||
19
Лефмихалыч
29.05.13
✎
14:23
|
(17) если было бы так, максимум не возвращал бы овер 700000
|
|||
20
Светлый Гений
29.05.13
✎
14:26
|
(O) а нафига столько временных таблиц лепить? Не проще вложенный запрос сделать?
|
|||
21
grayshadow
29.05.13
✎
14:26
|
(18) мне не надо по годам, надо абсолютный максимум за всю историю:)
(19) обратите внимание, параметров ДатаНач и ДатаКон в вирт.таб нету, это данные за всю историю |
|||
22
Светлый Гений
29.05.13
✎
14:28
|
(18)зачем?
|
|||
23
grayshadow
29.05.13
✎
14:29
|
(22) заказчег просит:)
это кусок большого отчета, в котором максимум используется для сравнения с текущими показателями |
|||
24
Светлый Гений
29.05.13
✎
14:30
|
(23)это вопрос не к тебе был )
|
|||
25
grayshadow
29.05.13
✎
14:30
|
(18) можно конечно сгруппировать по ДобавитьКДате(Период,Год,-2000), но как-то это криво имхо:)
|
|||
26
grayshadow
29.05.13
✎
14:31
|
поняла, сбилась со счета постов:)
|
|||
27
grayshadow
29.05.13
✎
14:33
|
в общ мораль такая: в последнем запросе
МАКСИМУМ(ВТПродССПоМес.СтоимостьОборот) = 799 892.82 МИНИМУМ(ВТПродССПоМес.СтоимостьОборот) = 799 892.82 СРЕДНЕЕ(ВТПродССПоМес.СтоимостьОборот) = 799 892.82 тоже!:) |
|||
28
grayshadow
29.05.13
✎
14:35
|
а количество и количество различных - 1:)))
|
|||
29
Светлый Гений
29.05.13
✎
14:37
|
(28) попробуй сделать без временных таблиц, вложенными запросами.
|
|||
30
grayshadow
29.05.13
✎
14:40
|
(28) помогло!
|
|||
31
Лефмихалыч
29.05.13
✎
14:41
|
(22) чтобы увидеть, что за 2013-й на самом деле максимум двести с хером и _узнать,_за_какой_именно год максимум составляет 700 с хером.
|
|||
32
grayshadow
29.05.13
✎
14:41
|
то есть (29)
спасибо!! и таки это глюк платформы, ящитаю:) |
|||
33
grayshadow
29.05.13
✎
14:42
|
вот так работает и возвращает максимум, а не хз что:
(вдруг кому пригодится в будущем) ВЫБРАТЬ РАЗРЕШЕННЫЕ ПродажиОбороты.Контрагент, ПродажиОбороты.СтоимостьОборот КАК СтоимостьОборот, ПродажиОбороты.Период КАК Период ПОМЕСТИТЬ ВТПродажиИСебестоимость ИЗ РегистрНакопления.Продажи.Обороты(, , Месяц, ) КАК ПродажиОбороты ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ ПродажиСебестоимостьОбороты.ЗаказПокупателя.Контрагент, СУММА(-1 * ПродажиСебестоимостьОбороты.СтоимостьОборот), ПродажиСебестоимостьОбороты.Период ИЗ РегистрНакопления.ПродажиСебестоимость.Обороты(, , Месяц, ) КАК ПродажиСебестоимостьОбороты ГДЕ НЕ ПродажиСебестоимостьОбороты.ЗаказПокупателя.Контрагент ЕСТЬ NULL СГРУППИРОВАТЬ ПО ПродажиСебестоимостьОбороты.ЗаказПокупателя.Контрагент, ПродажиСебестоимостьОбороты.Период ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ ВТПродССПоМес.Контрагент КАК Контрагент, максимум(ВТПродССПоМес.СтоимостьОборот) КАК СтоимостьОборот ИЗ ( ВЫБРАТЬ ВТПродажиИСебестоимость.Контрагент КАК Контрагент, СУММА(ВТПродажиИСебестоимость.СтоимостьОборот) КАК СтоимостьОборот, ВТПродажиИСебестоимость.Период КАК Период ИЗ ВТПродажиИСебестоимость КАК ВТПродажиИСебестоимость СГРУППИРОВАТЬ ПО ВТПродажиИСебестоимость.Контрагент, ВТПродажиИСебестоимость.Период ) КАК ВТПродССПоМес СГРУППИРОВАТЬ ПО ВТПродССПоМес.Контрагент |
|||
34
salvator
29.05.13
✎
14:43
|
И если уж делаешь вложенные таблицы, надо их удалять в конце.
|
|||
35
salvator
29.05.13
✎
14:43
|
*** временные таблицы
|
|||
36
grayshadow
29.05.13
✎
14:43
|
(34) так они сами помирают после окончания процедуры, в которой был запрос, не?
|
|||
37
salvator
29.05.13
✎
14:44
|
(36) Они умирают после завершения сессии пользователя.
|
|||
38
grayshadow
29.05.13
✎
14:45
|
хммм... почему тогда в ЗУП есть отчеты с 10-ком ВТ, и ни про одну не написано УНИЧТОЖИТЬ?:)
|
|||
39
Галахад
гуру
29.05.13
✎
14:49
|
Не, ну так не интересно.
Такая интрига, а оказывается результат предпоследнего запроса левый... :-( |
|||
40
grayshadow
29.05.13
✎
14:52
|
не левый, все копировала:)
тупо перенесла из ВТ во вложенный запрос и заработало |
|||
41
Галахад
гуру
29.05.13
✎
14:54
|
(40) Да ну, а условие на нулл?
|
|||
42
grayshadow
29.05.13
✎
14:56
|
оно не работает и ни на что не влияет:)
с ним и без него результат одинаковый |
|||
43
чеширский кот
29.05.13
✎
14:56
|
месяц убери, он суммирует на период РегистрНакопления.Продажи.Обороты(, , Месяц, ) КАК ПродажиОбороты
|
|||
44
grayshadow
29.05.13
✎
15:04
|
мне как раз нужна была периодичность месяц:) всем спасибо, вопрос решен:)
|
|||
45
Светлый Гений
29.05.13
✎
20:31
|
(32) Хорошо, что помогло, тоже считаю, что глюк платформы. А вообще, использование временных таблиц имеет смысл только для тех случаев, когда результат подзапроса будет использоваться несколько раз в разных частях запроса. ИМХО, в остальных случаях они прироста к производительности не дают, а наоборот, производительность падает.
|
|||
46
Лефмихалыч
29.05.13
✎
20:36
|
сами вы оба глюки платформы. Руки не той стороной в туловище вставлены просто
|
|||
47
Икогнито
29.05.13
✎
20:36
|
(45) > Хорошо, что помогло, тоже считаю, что глюк платформы.
Таких глюков у платформы не бывает. Бывают только кривые руки и невнимательность. |
|||
48
Светлый Гений
03.06.13
✎
20:57
|
(46) (47) и в что в (0) не так? И почему когда ТС сделала вложенным запросом тоже самое все заработало? Объясните криворукому.
|
|||
49
viktor_vv
03.06.13
✎
21:37
|
(45) Вообще-то не только для многократного использования. Вложенными запросами можно конкретно башку оптимизатору sql свернуть и он такой план придумает, что сервак легко в даун уйдет.
Временными таблицами ему можно облегчить жизнь. |
|||
50
Лефмихалыч
03.06.13
✎
22:55
|
(48) не то же самое сделала да и все
|
|||
51
Dethmont
04.06.13
✎
02:01
|
ВЫБРАТЬ РАЗРЕШЕННЫЕ
ПродажиОбороты.Контрагент, ПродажиОбороты.СтоимостьОборот КАК СтоимостьОборот, ПродажиОбороты.Период КАК Период ПОМЕСТИТЬ ВТПродажиИСебестоимость ИЗ РегистрНакопления.Продажи.Обороты(, , Месяц, ) КАК ПродажиОбороты ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ ПродажиСебестоимостьОбороты.ЗаказПокупателя.Контрагент, ПродажиСебестоимостьОбороты.СтоимостьОборот, ПродажиСебестоимостьОбороты.Период ИЗ РегистрНакопления.ПродажиСебестоимость.Обороты(, , Месяц, ) КАК ПродажиСебестоимостьОбороты ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ ВТПродажиИСебестоимость.Контрагент КАК Контрагент, ВТПродажиИСебестоимость.СтоимостьОборот КАК СтоимостьОборот, ВТПродажиИСебестоимость.Период КАК Период ПОМЕСТИТЬ ВТПродССПоМес ИЗ ВТПродажиИСебестоимость КАК ВТПродажиИСебестоимость ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ ВТПродССПоМес.Контрагент КАК Контрагент, МАКСИМУМ(ВТПродССПоМес.СтоимостьОборот) КАК СтоимостьОборот ИЗ ВТПродССПоМес КАК ВТПродССПоМес СГРУППИРОВАТЬ ПО ВТПродССПоМес.Контрагент |
|||
52
Dethmont
04.06.13
✎
02:01
|
ВНИМАТЕЛЬНО ЧИТАЕМ (1)
|
|||
53
Dethmont
04.06.13
✎
02:12
|
(46) ++
|
|||
54
grayshadow
05.06.13
✎
19:14
|
хорошо, второй пример:)
вот это возвращает пустой результат: ВЫБРАТЬ РАЗЛИЧНЫЕ НАЧАЛОПЕРИОДА(РегламентированныйПроизводственныйКалендарь.ДатаКалендаря, МЕСЯЦ) КАК ДатаКалендаря ПОМЕСТИТЬ ВТМесяцы ИЗ РегистрСведений.РегламентированныйПроизводственныйКалендарь КАК РегламентированныйПроизводственныйКалендарь ГДЕ РегламентированныйПроизводственныйКалендарь.ДатаКалендаря МЕЖДУ &НачалоПериода И &КонецПериода ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ РАЗРЕШЕННЫЕ ВТМесяцы.ДатаКалендаря КАК ДатаКалендаря, СодержаниеДоговоровПоАптекамПоНоменклатуре.Период КАК Период, СодержаниеДоговоровПоАптекамПоНоменклатуре.ДоговорКонтрагента КАК ДоговорКонтрагента, СодержаниеДоговоровПоАптекамПоНоменклатуре.Цена * СодержаниеДоговоровПоАптекамПоНоменклатуре.Количество КАК Сумма, КОЛИЧЕСТВО(УслугиКопия.Период) КАК Счетчик, СодержаниеДоговоровПоАптекамПоНоменклатуре.Номенклатура КАК Номенклатура, СодержаниеДоговоровПоАптекамПоНоменклатуре.Аптека КАК Аптека, СодержаниеДоговоровПоАптекамПоНоменклатуре.Действует ПОМЕСТИТЬ ВТ1 ИЗ РегистрСведений.СодержаниеДоговоровПоАптекамПоНоменклатуре КАК СодержаниеДоговоровПоАптекамПоНоменклатуре ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТМесяцы КАК ВТМесяцы ПО СодержаниеДоговоровПоАптекамПоНоменклатуре.Период <= ВТМесяцы.ДатаКалендаря И (СодержаниеДоговоровПоАптекамПоНоменклатуре.ДоговорКонтрагента.Владелец = &Контрагент) И (СодержаниеДоговоровПоАптекамПоНоменклатуре.Действует) ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СодержаниеДоговоровПоАптекамПоНоменклатуре КАК УслугиКопия ПО СодержаниеДоговоровПоАптекамПоНоменклатуре.Период >= УслугиКопия.Период И СодержаниеДоговоровПоАптекамПоНоменклатуре.ДоговорКонтрагента = УслугиКопия.ДоговорКонтрагента И СодержаниеДоговоровПоАптекамПоНоменклатуре.Номенклатура = УслугиКопия.Номенклатура И СодержаниеДоговоровПоАптекамПоНоменклатуре.Аптека = УслугиКопия.Аптека СГРУППИРОВАТЬ ПО ВТМесяцы.ДатаКалендаря, СодержаниеДоговоровПоАптекамПоНоменклатуре.Период, СодержаниеДоговоровПоАптекамПоНоменклатуре.ДоговорКонтрагента, СодержаниеДоговоровПоАптекамПоНоменклатуре.Цена * СодержаниеДоговоровПоАптекамПоНоменклатуре.Количество, СодержаниеДоговоровПоАптекамПоНоменклатуре.Номенклатура, СодержаниеДоговоровПоАптекамПоНоменклатуре.Аптека, СодержаниеДоговоровПоАптекамПоНоменклатуре.Действует ИМЕЮЩИЕ КОЛИЧЕСТВО(УслугиКопия.Период) <10 ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ ВТ1.ДоговорКонтрагента, ВТ1.Сумма ИЗ ВТ1 КАК ВТ1 а вот это выводит кучу строк с результатом: ВЫБРАТЬ РАЗЛИЧНЫЕ НАЧАЛОПЕРИОДА(РегламентированныйПроизводственныйКалендарь.ДатаКалендаря, МЕСЯЦ) КАК ДатаКалендаря ПОМЕСТИТЬ ВТМесяцы ИЗ РегистрСведений.РегламентированныйПроизводственныйКалендарь КАК РегламентированныйПроизводственныйКалендарь ГДЕ РегламентированныйПроизводственныйКалендарь.ДатаКалендаря МЕЖДУ &НачалоПериода И &КонецПериода ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ РАЗРЕШЕННЫЕ ВложенныйЗапрос.ДоговорКонтрагента, ВложенныйЗапрос.Сумма ИЗ (ВЫБРАТЬ ВТМесяцы.ДатаКалендаря КАК ДатаКалендаря, СодержаниеДоговоровПоАптекамПоНоменклатуре.Период КАК Период, СодержаниеДоговоровПоАптекамПоНоменклатуре.ДоговорКонтрагента КАК ДоговорКонтрагента, СодержаниеДоговоровПоАптекамПоНоменклатуре.Цена * СодержаниеДоговоровПоАптекамПоНоменклатуре.Количество КАК Сумма, КОЛИЧЕСТВО(УслугиКопия.Период) КАК Счетчик, СодержаниеДоговоровПоАптекамПоНоменклатуре.Номенклатура КАК Номенклатура, СодержаниеДоговоровПоАптекамПоНоменклатуре.Аптека КАК Аптека, СодержаниеДоговоровПоАптекамПоНоменклатуре.Действует КАК Действует ИЗ РегистрСведений.СодержаниеДоговоровПоАптекамПоНоменклатуре КАК СодержаниеДоговоровПоАптекамПоНоменклатуре ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТМесяцы КАК ВТМесяцы ПО СодержаниеДоговоровПоАптекамПоНоменклатуре.Период <= ВТМесяцы.ДатаКалендаря И (СодержаниеДоговоровПоАптекамПоНоменклатуре.ДоговорКонтрагента.Владелец = &Контрагент) И (СодержаниеДоговоровПоАптекамПоНоменклатуре.Действует) ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СодержаниеДоговоровПоАптекамПоНоменклатуре КАК УслугиКопия ПО СодержаниеДоговоровПоАптекамПоНоменклатуре.Период >= УслугиКопия.Период И СодержаниеДоговоровПоАптекамПоНоменклатуре.ДоговорКонтрагента = УслугиКопия.ДоговорКонтрагента И СодержаниеДоговоровПоАптекамПоНоменклатуре.Номенклатура = УслугиКопия.Номенклатура И СодержаниеДоговоровПоАптекамПоНоменклатуре.Аптека = УслугиКопия.Аптека СГРУППИРОВАТЬ ПО ВТМесяцы.ДатаКалендаря, СодержаниеДоговоровПоАптекамПоНоменклатуре.Период, СодержаниеДоговоровПоАптекамПоНоменклатуре.ДоговорКонтрагента, СодержаниеДоговоровПоАптекамПоНоменклатуре.Цена * СодержаниеДоговоровПоАптекамПоНоменклатуре.Количество, СодержаниеДоговоровПоАптекамПоНоменклатуре.Номенклатура, СодержаниеДоговоровПоАптекамПоНоменклатуре.Аптека, СодержаниеДоговоровПоАптекамПоНоменклатуре.Действует ИМЕЮЩИЕ КОЛИЧЕСТВО(УслугиКопия.Период) < 10) КАК ВложенныйЗапрос ("выбрать различные" пришлось перенести, т.к. во вложенном эту опцию нельзя юзать) есть желание поискать 10 отличий?:) |
|||
55
grayshadow
05.06.13
✎
19:19
|
з.ы. это базы разных клиентов - обе КА, но разные релизы
что их объединяет - платформа 8.2.17.153:) |
|||
56
EvgeniuXP
05.06.13
✎
21:58
|
временные таблицы - глюк - посмешили
|
|||
57
Мимохожий Однако
05.06.13
✎
22:15
|
(49)+100500
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |