Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft Access Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2 3   вперед  Ctrl      все
 Необходимо вычислить максимальную суммарную продажу за несколько подряд идущих дней  [new]
Ammalira
Member

Откуда:
Сообщений: 21
Здравствуйте! Необходимо определить максимальную суммарную продажу за каждые 5 подряд идущих дней (т.е сумма 1-5 день, 2-6 и т.д). Помогите, пожалуйста. Заранее благодарю

К сообщению приложен файл (Задание.rar - 33Kb) cкачать
5 май 14, 02:57    [15971344]     Ответить | Цитировать Сообщить модератору
 Re: Необходимо вычислить максимальную суммарную продажу за несколько подряд идущих дней  [new]
Mina Anna Mazzini
Guest
Ammalira,

Загоняем значения в стек, вычисляем максимум и запоминаем его положение в стеке. Каждое новое значение контролируем на макс и переназначаем его, если так. Когда значение, соответствующее текущему макс выдавливается из стека, снова пересчитываем стек на макс и т.д.. Код м.б. по-разному оптимизирован в зависимости от характера поступающих данных.

А какие у тебя соображения?

В архиве accdb
5 май 14, 08:29    [15971540]     Ответить | Цитировать Сообщить модератору
 Re: Необходимо вычислить максимальную суммарную продажу за несколько подряд идущих дней  [new]
Ammalira
Member

Откуда:
Сообщений: 21
Mina Anna Mazzini,

Если честно, я очень плохо разбираюсь в SQL, поэтому не совсем понимаю как можно реализовать данную задачу. Находила тему, где подсчитывалась максимальная сумма за каждые 2 дня, но так и не смогла переделать. =(

К сообщению приложен файл (Задание2.rar - 9Kb) cкачать
5 май 14, 08:40    [15971556]     Ответить | Цитировать Сообщить модератору
 Re: Необходимо вычислить максимальную суммарную продажу за несколько подряд идущих дней  [new]
Mina Anna Mazzini
Guest
Ammalira, я с SQL тоже "на Вы" и мой алгоритм чисто вычислительный. Но, мне будет очень интересно посмотреть на решение задачи скользящего макса через запрос :)

автор
Находила тему, где подсчитывалась максимальная сумма за каждые 2 дня, но так и не смогла переделать. =(

За два дня не интересно и не показательно - слишком уж частный случай. Но, ты бы найденную ссылку хоть дала - вдруг кто решится тебе помочь, так пригадится... Впрочем, так скорее всего просто обращение идет к предыдущему значению...
5 май 14, 09:23    [15971662]     Ответить | Цитировать Сообщить модератору
 Re: Необходимо вычислить максимальную суммарную продажу за несколько подряд идущих дней  [new]
Ammalira
Member

Откуда:
Сообщений: 21
Mina Anna Mazzini,

Прилагаю ссылки, может действительно будет проще оттолкнуться от этого.
https://www.sql.ru/forum/1025558/nuzhno-poschitat-maksimalnuu-summu-podryad-idushhih-periodov
http://www.cyberforum.ru/ms-access/thread881096.html

Сейчас еще сяду и буду пытаться самостоятельно разобраться, но вчера за полдня у меня так ничего и не получилось =(
5 май 14, 09:43    [15971745]     Ответить | Цитировать Сообщить модератору
 Re: Необходимо вычислить максимальную суммарную продажу за несколько подряд идущих дней  [new]
guest_rusimport
Guest
Ammalira,

по моему qwerty112 всё очень доступно изложил, для вашего примера это будет выглядеть так

SELECT top 24 Задание.Наименование, Задание.Дата as [начальная дата], Задание_4.дата AS [конечная дата], (Задание.продажа+Задание_1.продажа+Задание_2.продажа+Задание_3.продажа+Задание_4.продажа) AS [сумма продаж]
FROM (((Задание left  JOIN Задание AS Задание_1 ON Задание.дата = Задание_1.дата-1) left  JOIN Задание AS Задание_2 ON Задание.дата = Задание_2.дата-2) left  JOIN Задание AS Задание_3 ON Задание.дата = Задание_3.дата-3) left  JOIN Задание AS Задание_4 ON Задание.дата = Задание_4.дата-4
order by Задание.Дата


где 24 - это число записей в вашей табличке минус 4
5 май 14, 10:30    [15971959]     Ответить | Цитировать Сообщить модератору
 Re: Необходимо вычислить максимальную суммарную продажу за несколько подряд идущих дней  [new]
Ammalira
Member

Откуда:
Сообщений: 21
guest_rusimport,

Спасибо огромное, просто преогромнейшее! Подскажите, а как сделать так, чтоб выводились в итоге не все суммы а только одна, максимальная?

Чувствую себя полным нубом. Спасибо Вам за помощь!
5 май 14, 10:45    [15972033]     Ответить | Цитировать Сообщить модератору
 Re: Необходимо вычислить максимальную суммарную продажу за несколько подряд идущих дней  [new]
Mina Anna Mazzini
Guest
guest_rusimport, я правильно понимаю из этого запроса, что в общем случае вначале надо подсчитать кол-во записей в таблице, а сам запрос формировать каждый раз заново согласно заданному периоду скользящего?

Он, вообще, взлетит, на, скажем, 1 мио записей и периоде, допустим, 189? Да и сама строка запроса, вроде, не резиновая...
5 май 14, 11:21    [15972282]     Ответить | Цитировать Сообщить модератору
 Re: Необходимо вычислить максимальную суммарную продажу за несколько подряд идущих дней  [new]
guest_rusimport
Guest
Ammalira,
автор
Подскажите, а как сделать так, чтоб выводились в итоге не все суммы а только одна, максимальная?


здесь не понял, разъясните

Mina Anna Mazzini ,

этот запрос можно формировать динамически (через VBA, подсчитывая там значение для TOP)... ограничения на длину текста запроса , конечно, присутствуют, и их надо учитывать
5 май 14, 11:33    [15972404]     Ответить | Цитировать Сообщить модератору
 Re: Необходимо вычислить максимальную суммарную продажу за несколько подряд идущих дней  [new]
Ammalira
Member

Откуда:
Сообщений: 21
guest_rusimport,

Нужно сначала посчитать все суммы, но сделать так, чтобы итоге из этих сумм выводилась только одна, наибольшая из них. Это возможно реализовать в одном запросе? Или необходимо будет делать два разных: сначала на подсчет сумм, а потом на определение максимального числа?
5 май 14, 11:44    [15972496]     Ответить | Цитировать Сообщить модератору
 Re: Необходимо вычислить максимальную суммарную продажу за несколько подряд идущих дней  [new]
guest_rusimport
Guest
Ammalira
guest_rusimport,

Нужно сначала посчитать все суммы, но сделать так, чтобы итоге из этих сумм выводилась только одна, наибольшая из них. Это возможно реализовать в одном запросе? Или необходимо будет делать два разных: сначала на подсчет сумм, а потом на определение максимального числа?


SELECT TOP 1 Задание.Наименование, Задание.Дата AS [начальная дата], Задание_4.дата AS [конечная дата], (Задание.продажа+Задание_1.продажа+Задание_2.продажа+Задание_3.продажа+Задание_4.продажа) AS [сумма продаж]
FROM (((Задание LEFT JOIN Задание AS Задание_1 ON Задание.дата = Задание_1.дата-1) LEFT JOIN Задание AS Задание_2 ON Задание.дата = Задание_2.дата-2) LEFT JOIN Задание AS Задание_3 ON Задание.дата = Задание_3.дата-3) LEFT JOIN Задание AS Задание_4 ON Задание.дата = Задание_4.дата-4
ORDER BY 4 desc;
5 май 14, 11:56    [15972611]     Ответить | Цитировать Сообщить модератору
 Re: Необходимо вычислить максимальную суммарную продажу за несколько подряд идущих дней  [new]
Ammalira
Member

Откуда:
Сообщений: 21
guest_rusimport,

Просто огромнейшее Вам спасибо! Это именно то, что мне было нужно. Вы меня буквально спасли) Спасибо!
5 май 14, 12:01    [15972644]     Ответить | Цитировать Сообщить модератору
 Re: Необходимо вычислить максимальную суммарную продажу за несколько подряд идущих дней  [new]
Опоздавший
Guest
Еще такой вариант
SELECT TOP 1 T1.Дата AS Дата_начала, T1.Дата +4 AS Дата_окончания, Sum(T2.Продажа) AS Сумма
FROM Задание AS T1 INNER JOIN Задание AS T2 ON (T2.Дата Between T1.Дата AND T1.Дата +4)
GROUP BY T1.Дата
HAVING Count(*)=5
ORDER BY 3 DESC
5 май 14, 14:58    [15974223]     Ответить | Цитировать Сообщить модератору
 Re: Необходимо вычислить максимальную суммарную продажу за несколько подряд идущих дней  [new]
guest_rusimport
Guest
Опоздавший,

Красиво! А чего стесняетесь под постоянным ником публиковать? Не понятно ж -скромность или ,наоборот, высокомерие? Темны и не понятны бывают "закоулки" души человеческой, самих себя иногда не узнаем и боимся:)
6 май 14, 09:15    [15977256]     Ответить | Цитировать Сообщить модератору
 Re: Необходимо вычислить максимальную суммарную продажу за несколько подряд идущих дней  [new]
Quiet333
Member

Откуда: 55-37 сш 37-37 вд
Сообщений: 1020
guest_rusimport
Опоздавший,

Красиво! А чего стесняетесь под постоянным ником публиковать? Не понятно ж -скромность или ,наоборот, высокомерие? Темны и не понятны бывают "закоулки" души человеческой, самих себя иногда не узнаем и боимся:)


"Сам такой!"
6 май 14, 11:31    [15978270]     Ответить | Цитировать Сообщить модератору
 Re: Необходимо вычислить максимальную суммарную продажу за несколько подряд идущих дней  [new]
guest_rusimport
Guest
Quiet333,

не безгрешен, каюсь :)
6 май 14, 12:41    [15978983]     Ответить | Цитировать Сообщить модератору
 Re: Необходимо вычислить максимальную суммарную продажу за несколько подряд идущих дней  [new]
Ammalira
Member

Откуда:
Сообщений: 21
Еще раз спасибо всем за помощь! Я понимаю, что этот форум посвящен SQL, но может все-таки кто-нибудь сможет помочь реализовать эту же задачу, но только при помощи конструктора запросов? Или хотя бы намекнет как это можно было бы сделать.
14 май 14, 12:41    [16014796]     Ответить | Цитировать Сообщить модератору
 Re: Необходимо вычислить максимальную суммарную продажу за несколько подряд идущих дней  [new]
П-Л
Guest
Конструктор запросов - малопригодный инструмент. В реальных задачах неизбежно приходится писать нормальный скл код нормальным способом. Один из аргументов за АДП, где запросы пишутся по-человечески со всеми сервисными функциями.
14 май 14, 13:14    [16015081]     Ответить | Цитировать Сообщить модератору
 Re: Необходимо вычислить максимальную суммарную продажу за несколько подряд идущих дней  [new]
Ammalira
Member

Откуда:
Сообщений: 21
П-Л,

Это я понимаю, но задача, как выяснилось, состоит в том, чтоб сделать именно через конструктор.
14 май 14, 13:33    [16015256]     Ответить | Цитировать Сообщить модератору
 Re: Необходимо вычислить максимальную суммарную продажу за несколько подряд идущих дней  [new]
Опоздавший
Guest
Ammalira
... задача, как выяснилось, состоит в том, чтоб сделать именно через конструктор.

Если выложенный мною запрос записать несколько по иному
SELECT TOP 1 T1.Дата AS Дата_начала, T1.Дата +4 AS Дата_окончания, Sum(T2.Продажа) AS Сумма
FROM Задание AS T1, Задание AS T2
WHERE T2.Дата Between T1.Дата AND T1.Дата +4
GROUP BY T1.Дата
HAVING Count(*)=5
ORDER BY 3 DESC

то он будет представим а режиме конструктора.
15 май 14, 11:29    [16019885]     Ответить | Цитировать Сообщить модератору
 Re: Необходимо вычислить максимальную суммарную продажу за несколько подряд идущих дней  [new]
Ammalira
Member

Откуда:
Сообщений: 21
Опоздавший,

Не могу сообразить как даты выразить через конструктор. Нельзя создавать отдельный запрос для каждой группы из 5 дат, необходимо собрать это все вместе каким-то образом.
15 май 14, 14:48    [16021476]     Ответить | Цитировать Сообщить модератору
 Re: Необходимо вычислить максимальную суммарную продажу за несколько подряд идущих дней  [new]
Опоздавший
Guest
Ammalira
Не могу сообразить как даты выразить через конструктор.

Не понял. Но на всякий случай: слово Дата - это имя поля в таблице Задание.
Ammalira
Нельзя создавать отдельный запрос для каждой группы из 5 дат, необходимо собрать это все вместе каким-то образом.

Данный запрос является решением задачи
Ammalira
Необходимо определить максимальную суммарную продажу за каждые 5 подряд идущих дней (т.е сумма 1-5 день, 2-6 и т.д).

Если же возникло желание посмотреть суммарные продажи по всем группам из 5 подряд идущих дней, то уберите в запросе предикат Top 1, который в совокупности с заданной сортировкой позволяет найти (и показать) группу с максимальным значением суммы продаж.
15 май 14, 18:23    [16023126]     Ответить | Цитировать Сообщить модератору
 Re: Необходимо вычислить максимальную суммарную продажу за несколько подряд идущих дней  [new]
Ammalira
Member

Откуда:
Сообщений: 21
Опоздавший,

Смотрите, цель состоит в том, чтобы посчитать максимальную сумму, используя конструктор запросов, а не SQL код. Я пробовала сделать таким образом:
1. Первый запрос на создание таблицы, с интервалом дат с 1 по 5.
2. Второй запрос на добавление строки в таблицу с интервалом со 2 по 6.
3. Еще 22 запроса на добавление, учитывая все последующие интервалы.
4. Последний запрос на выборку, на выведение максимальной суммы.

Мне сказали, что это слишком громоздко и что необходимо придумать решение, которое могло бы использоваться и в большем временном интервале, например, за квартал или за год. Не создавать же в таком случае 1000 запросов. Решение есть, но я никак не могу уловить как выразить все эти даты через один запрос.
15 май 14, 18:47    [16023269]     Ответить | Цитировать Сообщить модератору
 Re: Необходимо вычислить максимальную суммарную продажу за несколько подряд идущих дней  [new]
Опоздавший
Guest
Ammalira
Смотрите, цель состоит в том, чтобы посчитать максимальную сумму, используя конструктор запросов

Так оговорено о последнем запросе
Опоздавший
... он будет представим а режиме конструктора

Подробная инструкция
. Копируете мой последний запрос в буфер обмена.
2. Создаете новый запрос, отказываясь от добавления таблиц.
3. Переходите в режим SQL и вставляете скопированный запрос.
4. Переходите в режим конструктора.
5. Изучаете.
15 май 14, 19:27    [16023481]     Ответить | Цитировать Сообщить модератору
 Re: Необходимо вычислить максимальную суммарную продажу за несколько подряд идущих дней  [new]
Ammalira
Member

Откуда:
Сообщений: 21
Опоздавший,

Изучать то изучаю, но меня смущают две таблицы Т1 и Т2, которых как бы не существует и которые берутся в качестве имен таблиц в конструкторе.
15 май 14, 20:21    [16023620]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2 3   вперед  Ctrl      все
Все форумы / Microsoft Access Ответить