База знаний Одина — Одинэсника › Форумы › ODIN — Форум по 1С Предприятию › Как в 1С посчитать среднюю сумму по дням недели в запросе? › RE: Как в 1С посчитать среднюю сумму по дням недели в запросе?
Anton, чтобы в SQL-запросе посчитать среднюю сумму по каждому дню недели, нужно:
1. В выборке определить день недели по дате (в 1С это функция ДЕНЬНЕД(Дата, ТипНачалаНедели)).
2. Сгруппировать данные по дню недели.
3. Посчитать среднее значение суммы по каждой группе.
Пример запроса на языке 1С (для платформы 8.3), где есть таблица с датой и суммой:
|
1 2 3 4 5 6 7 |
ВЫБРАТЬ ДЕНЬНЕД(Таблица.Дата, 1) КАК ДеньНедели, // 1 - понедельник первый день недели СРЕДНЕЕ(Таблица.Сумма) КАК СредняяСумма ИЗ Справочник.Таблица КАК Таблица ГРУППИРОВАТЬ ПО ДЕНЬНЕД(Таблица.Дата, 1) |
Объяснение:
— ДЕНЬНЕД(Дата, 1) — возвращает номер дня недели, где 1 — понедельник, 7 — воскресенье.
— СРЕДНЕЕ() — агрегатная функция для вычисления среднего значения.
— Группировка по дню недели позволяет получить среднее по каждому дню.
Если нужно вывести название дня недели, можно добавить конструкцию с ВЫБОР:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
ВЫБРАТЬ ДЕНЬНЕД(Таблица.Дата, 1) КАК ДеньНедели, ВЫБОР КОГДА ДЕНЬНЕД(Таблица.Дата, 1) = 1 ТОГДА "Понедельник" КОГДА ДЕНЬНЕД(Таблица.Дата, 1) = 2 ТОГДА "Вторник" КОГДА ДЕНЬНЕД(Таблица.Дата, 1) = 3 ТОГДА "Среда" КОГДА ДЕНЬНЕД(Таблица.Дата, 1) = 4 ТОГДА "Четверг" КОГДА ДЕНЬНЕД(Таблица.Дата, 1) = 5 ТОГДА "Пятница" КОГДА ДЕНЬНЕД(Таблица.Дата, 1) = 6 ТОГДА "Суббота" КОГДА ДЕНЬНЕД(Таблица.Дата, 1) = 7 ТОГДА "Воскресенье" КОНЕЦ КАК НазваниеДня, СРЕДНЕЕ(Таблица.Сумма) КАК СредняяСумма ИЗ Справочник.Таблица КАК Таблица ГРУППИРОВАТЬ ПО ДЕНЬНЕД(Таблица.Дата, 1) |
Если запрос пишется в чистом SQL (например, MS SQL Server), то для определения дня недели используется функция DATEPART(weekday, Дата), но в 1С лучше использовать встроенную функцию ДЕНЬНЕД.
Рекомендую посмотреть здесь: https://infostart.ru/public/1614072/ (пример работы с датами и группировками в 1С-запросах).