30 / 17 / 4
Регистрация: 13.08.2012
Сообщений: 490
1

Сделать запрос на расчет возраста коньяка

13.01.2019, 01:47. Показов 4570. Ответов 44
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
у организации есть продукт (коньяк) и обязательно посчитать сколько ему лет

но главная загвоздка в том что после покупки иногда нужно делать купаж. (перемешать Каньяки разныx возрастов) допустим 100 литров коньяка у которого возраст 10 лет перемешать 100 литров коньяка у которого возраст 20 лет , и получается что возраст у 200 литров станет 15 лет (10*10=1000, 100*20=2000, теперь нужна сумму (2000+1000) / (100+200)=15 таким образом получим сколька лет канику. детальна как считывается показано на рисунке.

в программе я занос 4 операции.

нужна сделать запрос который после каждой операции мог бы показать итоги . пример канэшнава запроса есть в картинке...


хочу особо отметить что вычисление должно проводится строго по порядку в противном случае итоги будут неверны по скольку расход -50 литров дает разницу из за того после каждой операции разная картина и возрасте и вкаличество каньяка.
Вложения
Тип файла: rar New folder (2).rar (51.4 Кб, 3 просмотров)
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
13.01.2019, 01:47
Ответы с готовыми решениями:

Вычисление возраста сотрудника и расчёт среднего возраста
Народ ПОМОГИТЕ пожалуйста!!! В Access не силён (на уровне пользователя). Имеется база данных с...

Как сделать запрос на расчет цены?
Всем привет! не могу разобраться как расчитать стоимость через запрос: цена товара зависит от...

Расчет возраста человека
Дана дата рождения человека. Нужно вывести на экран возраст человека (точнее, количество полных лет)

Автоматический расчет возраста
Здравствуйте уважаемые эксперты! Являюсь новичком в программирование на 1с и при создание...

44
30 / 17 / 4
Регистрация: 13.08.2012
Сообщений: 490
13.01.2019, 01:49  [ТС] 2
если не затруднит выложите пример, используя этот файл

Добавлено через 40 секунд
большое спасибо за ранее...
0
Модератор
Эксперт MS Access
6003 / 2832 / 692
Регистрация: 12.06.2016
Сообщений: 7,594
13.01.2019, 04:48 3
Цитата Сообщение от rvafexa Посмотреть сообщение
нужна сделать запрос который после каждой операции мог бы показать итоги
SQL
1
2
3
4
SELECT операции.дата_операции, 
DSum("литр*возраст_в_годах","операции","товар_ID=" & товар_ID & " AND дата_операции<=" & Format(дата_операции,"\#mm\/dd\/yyyy\#")) /
DSum("литр","операции","товар_ID=" & товар_ID & " AND дата_операции<=" & Format(дата_операции,"\#mm\/dd\/yyyy\#")) AS ИтоговыйВозраст
FROM операции;
дата_операцииЛитрыИтоговыйВозраст
01.01.201910010
02.01.201920015
03.01.201915015
04.01.201945025
1
30 / 17 / 4
Регистрация: 13.08.2012
Сообщений: 490
13.01.2019, 08:26  [ТС] 4
спасибо почти то што надо...

я выложил новый файл Который називаетса "для уточнение" там есть запрос "запрос1" я хочу получить вот такой запрос и чтобы там было правильно "литр_Итог" и "возраст_в_годах_Итог"....

можна сделайте в моем файле
Вложения
Тип файла: rar xxxx.rar (39.6 Кб, 2 просмотров)
0
30 / 17 / 4
Регистрация: 13.08.2012
Сообщений: 490
13.01.2019, 08:38  [ТС] 5
Цитата Сообщение от Capi Посмотреть сообщение
SELECT операции.дата_операции,
DSum("литр*возраст_в_годах","операции","товар_ID=" & товар_ID & " AND дата_операции<=" & Format(дата_операции,"\#mm\/dd\/yyyy\#")) /
DSum("литр","операции","товар_ID=" & товар_ID & " AND дата_операции<=" & Format(дата_операции,"\#mm\/dd\/yyyy\#")) AS ИтоговыйВозраст
FROM операции;

этот запрос выдаёт ошибку и вниом нет литр_Итог и товар_ID.
Миниатюры
Сделать запрос на расчет возраста коньяка  
0
Модератор
Эксперт MS Access
11956 / 4824 / 779
Регистрация: 07.08.2010
Сообщений: 14,128
Записей в блоге: 4
13.01.2019, 10:28 6
Цитата Сообщение от rvafexa Посмотреть сообщение
этот запрос выдаёт ошибку и вниом нет литр_Итог и товар_ID.
у вас в таблице ТОВАР есть 2 пустые строки - поэтому и показывается #error#
товар_IDоперациадата_операцииИтоговыйВозраст
1приход01.01.201910
1купаж02.01.201915
1 расход03.01.201915
1купаж04.01.201925
SQL
1
2
3
4
5
6
7
8
SELECT
 операции.товар_ID,
 операции.операциа,
 операции.дата_операции, DSum("литр*возраст_в_годах","операции",
"товар_ID=" & товар_ID & " AND дата_операции<=" & Format(дата_операции,"\#mm\/dd\/yyyy\#"))
/DSum("литр","операции",
"товар_ID=" & товар_ID & " AND дата_операции<=" & Format(дата_операции,"\#mm\/dd\/yyyy\#")) AS ИтоговыйВозраст
FROM операции;
1
30 / 17 / 4
Регистрация: 13.08.2012
Сообщений: 490
13.01.2019, 10:48  [ТС] 7
по моему принцип такого запроса не верна если дапустим што пятая операция будет -50 литров возраст 25 лет то итог после этой операции естественно должен быть 400 литров 25 лет. но запрос выдаёт

....

Сам файл
Миниатюры
Сделать запрос на расчет возраста коньяка  
Вложения
Тип файла: rar для уточнение.rar (29.6 Кб, 2 просмотров)
0
Модератор
Эксперт MS Access
11956 / 4824 / 779
Регистрация: 07.08.2010
Сообщений: 14,128
Записей в блоге: 4
13.01.2019, 10:57 8
опять у вас строка в таблице ОПЕРАЦИИ --пустая
товар_IDдата_операциилитрвозраст_в_годахоперациалитр_Итогвозраст_в_годах_Итог
101.01.201910010приход10010
102.01.201910020купаж10020
103.01.2019-5015 расход-5015
104.01.201930030купаж30030
105.01.2019-5030 расход-5030
0
30 / 17 / 4
Регистрация: 13.08.2012
Сообщений: 490
13.01.2019, 11:06  [ТС] 9
несматря пустые будут или нет строки , цифры считает неправильно.... должно быть так
Миниатюры
Сделать запрос на расчет возраста коньяка  
0
Модератор
Эксперт MS Access
11956 / 4824 / 779
Регистрация: 07.08.2010
Сообщений: 14,128
Записей в блоге: 4
13.01.2019, 11:20 10
вечером посмотрю -- сейчас ухожу по делам
0
Эксперт MS Access
17485 / 7247 / 1651
Регистрация: 21.06.2012
Сообщений: 13,863
13.01.2019, 11:43 11
А так (стандартный накопительный запрос)
SQL
1
2
3
4
5
6
SELECT операции.товар_ID, операции.операциа, операции.дата_операции, 
SUM([операции_1.литр]) AS Литров, SUM([операции_1.литр]*[операции_1.возраст_в_годах])/SUM([операции_1.литр]) AS Возраст
FROM операции INNER JOIN операции AS операции_1 ON 
(операции.дата_операции >= операции_1.дата_операции) AND (операции.товар_ID = операции_1.товар_ID)
GROUP BY операции.товар_ID, операции.операциа, операции.дата_операции
ORDER BY операции.дата_операции;
Результат
товар_IDоперациадата_операцииЛитровВозраст
1приход01.01.201910010
1купаж02.01.201920015
1 расход03.01.201915015
1купаж04.01.201945025
1 расход05.01.201940024,375
1
30 / 17 / 4
Регистрация: 13.08.2012
Сообщений: 490
13.01.2019, 12:02  [ТС] 12
я щас внимательно посмотрел работают оба варианта - Capi #3 и ltv_1953 #11
большое спасибо всем... очень помогли выручили прямо..

умения одна просьба можете объяснить как работают эти два запроса ато я не совсем понял...

1.
SQL
1
2
3
4
SELECT операции.дата_операции, 
DSum("литр*возраст_в_годах","операции","товар_ID=" & товар_ID & " AND дата_операции<=" & Format(дата_операции,"\#mm\/dd\/yyyy\#")) /
DSum("литр","операции","товар_ID=" & товар_ID & " AND дата_операции<=" & Format(дата_операции,"\#mm\/dd\/yyyy\#")) AS ИтоговыйВозраст
FROM операции;
2.
SQL
1
2
3
4
5
6
SELECT операции.товар_ID, операции.операциа, операции.дата_операции, 
SUM([операции_1.литр]) AS Литров, SUM([операции_1.литр]*[операции_1.возраст_в_годах])/SUM([операции_1.литр]) AS Возраст
FROM операции INNER JOIN операции AS операции_1 ON 
(операции.дата_операции >= операции_1.дата_операции) AND (операции.товар_ID = операции_1.товар_ID)
GROUP BY операции.товар_ID, операции.операциа, операции.дата_операции
ORDER BY операции.дата_операции;
Добавлено через 2 минуты
хочу особо отметить что вычисление должно проводится строго по порядку в противном случае итоги будут неверны.

имеется в виду порядок даты а после если несколько операций за день то уже по id...
0
Модератор
Эксперт MS Access
6003 / 2832 / 692
Регистрация: 12.06.2016
Сообщений: 7,594
13.01.2019, 12:05 13
Цитата Сообщение от rvafexa Посмотреть сообщение
если дапустим што пятая операция будет -50 литров возраст 25 лет
то итог после этой операции естественно должен быть 400 литров 25 лет.
но запрос выдаёт....
Это про какой запрос?

Мой все правильно выдает:
дата_операцииЛитрыИтоговыйВозраст
01.01.201910010
02.01.201920015
03.01.201915015
04.01.201945025
05.01.201940025

А чтобы пустые строки не давали ошибок, просто добавьте такое условие:
SQL
1
WHERE дата_операции IS NOT NULL
.
SQL
1
2
3
4
5
SELECT дата_операции, 
DSum("литр","операции","товар_ID=" & товар_ID & " AND дата_операции<=" & Format(дата_операции,"\#mm\/dd\/yyyy\#")) AS Литры, 
DSum("литр*возраст_в_годах","операции","товар_ID=" & товар_ID & " AND дата_операции<=" & Format(дата_операции,"\#mm\/dd\/yyyy\#"))/DSum("литр","операции","товар_ID=" & товар_ID & " AND дата_операции<=" & Format(дата_операции,"\#mm\/dd\/yyyy\#")) AS ИтоговыйВозраст
FROM операции
WHERE дата_операции IS NOT NULL;
1
Модератор
Эксперт MS Access
6003 / 2832 / 692
Регистрация: 12.06.2016
Сообщений: 7,594
13.01.2019, 12:09 14
Цитата Сообщение от rvafexa Посмотреть сообщение
если несколько операций за день то уже по id
Это в моем запросе не учитывается.
Сейчас добавлю.
1
Мы один, давай на "ты"
3421 / 1299 / 312
Регистрация: 16.06.2016
Сообщений: 3,044
13.01.2019, 12:15 15
rvafexa, насколько помню, у коньяка возраст считается не по среднему возрасту спиртов, а по минимальному.
1
Эксперт MS Access
17485 / 7247 / 1651
Регистрация: 21.06.2012
Сообщений: 13,863
13.01.2019, 12:23 16
SQL
1
2
3
4
5
6
7
8
SELECT операции.товар_ID, операции.операциа, операции.дата_операции, операции.ID, 
SUM([операции_1.литр]) AS Литров, 
SUM([операции_1.литр]*[операции_1.возраст_в_годах])/SUM([операции_1.литр]) AS Возраст
FROM операции INNER JOIN операции AS операции_1 ON 
(операции.товар_ID = операции_1.товар_ID) AND (операции.дата_операции >= операции_1.дата_операции) 
AND (операции.ID >= операции_1.ID)
GROUP BY операции.товар_ID, операции.операциа, операции.дата_операции, операции.ID
ORDER BY операции.дата_операции, операции.ID;
А что здесь пояснять - нестандартный JOIN, суммируются значения из алиаса операции_1 таблицы операции по условию, задаваемому в JOIN'не.
Цитата Сообщение от Панург Посмотреть сообщение
rvafexa, насколько помню, у коньяка возраст считается не по среднему возрасту спиртов, а по минимальному.
Именно так. Коньяк - по минимальному возрасту спирта на момент розлива. Виски - по минимальному возрасту компонентов ... .
0
Модератор
Эксперт MS Access
6003 / 2832 / 692
Регистрация: 12.06.2016
Сообщений: 7,594
13.01.2019, 15:08 17
Цитата Сообщение от rvafexa Посмотреть сообщение
если несколько операций за день то уже по id
Вот:
SQL
1
2
3
4
5
6
7
8
9
SELECT ID,[дата_операции], 
       DSum("литр","операции","товар_ID=" & [товар_ID] & " AND ID<=" & [ID] & 
       " AND дата_операции<=" & Format([дата_операции],"\#mm\/dd\/yyyy\#")) AS Литры, 
       DSum("литр*возраст_в_годах","операции","товар_ID=" & [товар_ID] & " AND ID<=" & [ID] &  
       " AND дата_операции<=" & Format([дата_операции],"\#mm\/dd\/yyyy\#")) \
       DSum("литр","операции","товар_ID=" & [товар_ID] & " AND ID<=" & [ID] &  
       " AND дата_операции<=" & Format([дата_операции],"\#mm\/dd\/yyyy\#")) AS ИтоговыйВозраст
FROM операции
WHERE дата_операции IS NOT NULL;
Цитата Сообщение от rvafexa Посмотреть сообщение
дапустим што пятая операция будет -50 литров возраст 25 лет
то итог после этой операции естественно должен быть 400 литров 25 лет
Не 400 литров, а 350.
400- 50 = 350.
IDдата_операцииЛитрыИтоговыйВозраст
901.01.201910010
4002.01.201920015
4403.01.201915015
4504.01.201945025
5405.01.201940025
5605.01.201935025
0
30 / 17 / 4
Регистрация: 13.08.2012
Сообщений: 490
13.01.2019, 16:34  [ТС] 18
кто нибудь объясните пожалуйста как работает запрос построчна ...?


1.
SQL
1
2
3
4
5
6
SELECT операции.товар_ID, операции.операциа, операции.дата_операции, 
SUM([операции_1.литр]) AS Литров, SUM([операции_1.литр]*[операции_1.возраст_в_годах])/SUM([операции_1.литр]) AS Возраст
FROM операции INNER JOIN операции AS операции_1 ON 
(операции.дата_операции >= операции_1.дата_операции) AND (операции.товар_ID = операции_1.товар_ID)
GROUP BY операции.товар_ID, операции.операциа, операции.дата_операции
ORDER BY операции.дата_операции;

2.
SQL
1
2
3
4
5
6
7
8
9
SELECT ID,[дата_операции], 
       DSum("литр","операции","товар_ID=" & [товар_ID] & " AND ID<=" & [ID] & 
       " AND дата_операции<=" & Format([дата_операции],"\#mm\/dd\/yyyy\#")) AS Литры, 
       DSum("литр*возраст_в_годах","операции","товар_ID=" & [товар_ID] & " AND ID<=" & [ID] &  
       " AND дата_операции<=" & Format([дата_операции],"\#mm\/dd\/yyyy\#")) \
       DSum("литр","операции","товар_ID=" & [товар_ID] & " AND ID<=" & [ID] &  
       " AND дата_операции<=" & Format([дата_операции],"\#mm\/dd\/yyyy\#")) AS ИтоговыйВозраст
FROM операции
WHERE дата_операции IS NOT NULL;
Добавлено через 16 минут
Цитата Сообщение от Capi Посмотреть сообщение
Не 400 литров, а 350.
400- 50 = 350.
сматра что занесена вахам варианте ... если рассматривать изначальный вариант 400 палучится

1 (100*10)
2 (100*20)
3-50 =150
4 + 300=450 литров..

Добавлено через 2 минуты
Цитата Сообщение от ltv_1953 Посмотреть сообщение
Именно так. Коньяк - по минимальному возрасту спирта на момент розлива. Виски - по минимальному возрасту компонентов ...
вразных странах по разному с щитают ...
0
Мы один, давай на "ты"
3421 / 1299 / 312
Регистрация: 16.06.2016
Сообщений: 3,044
13.01.2019, 19:29 19
Цитата Сообщение от rvafexa Посмотреть сообщение
вразных странах по разному с щитают ...
Но коньяк делают в одной стране. И считают в ней именно по минимальному возрасту. Потому если смешать коньячные спирты 10 и 20-летней выдержки, то будет считаться что он ХО (то бишь 6 и больше лет).

Добавлено через 5 минут
Цитата Сообщение от ltv_1953 Посмотреть сообщение
Коньяк - по минимальному возрасту спирта на момент розлива
нисогласен. в раю коньяк может стоять и в стеклянной таре, а возраст не изменяется. Возраст сколько в бочках стоял.
+ возраст считается на какое-то обязательное число (весной где-то), а не произвольно.
0
30 / 17 / 4
Регистрация: 13.08.2012
Сообщений: 490
13.01.2019, 22:39  [ТС] 20
щас праверол на деле оказывается не один не работает....

например если допустим што пользователь виол ошибочна ва втаром операции 20 лет вместо 10 и подправить 20 на 10 должен получится так как на картинке но не получается ... запрос не делает перешот .
Миниатюры
Сделать запрос на расчет возраста коньяка  
0
13.01.2019, 22:39
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
13.01.2019, 22:39
Помогаю со студенческими работами здесь

Расчет возраста в структурах
#include &lt;iostream&gt; #include &lt;conio.h&gt; // для getch() #include &lt;stdlib.h&gt; #include &lt;time.h&gt;...

Расчет возраста человека
Как рассчитать возраст человека? Не тупо отнимая дату от даты? DateDiff не работает (Informix-sql)

Расчёт возраста в Excel VBA
Прикрепляю файлик с примером.в ячейке А1 вводим дату рождения, макрос считает возраст в ячейку А2....

Расчет возраста и декод даты
Подскажите как правильно выполнить расчет возраста если знаю дату рождения. Проблема в том что не...

Расчет возраста по дате рождения
Нужно создать функцию, принимающую параметр типа DateTime с датой рождения и возвращающую DateTime...

Расчет категорий должностей от возраста и перенесение значений на другой лист
Помогите пожалуйста, чайнику. Думала справлюсь сама, гуглила много сайтов, но так и не могу...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru