С Новым годом! Форум программистов, компьютерный форум, киберфорум
Microsoft Access
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.87/15: Рейтинг темы: голосов - 15, средняя оценка - 4.87
0 / 0 / 0
Регистрация: 13.02.2017
Сообщений: 7
1

Кол-во месяцев между датами в разных строках

21.08.2017, 17:21. Показов 3081. Ответов 6

Author24 — интернет-сервис помощи студентам
Добрый день! Прошу помощи по след проблеме.
Имеется таблица регистрации суммы ежемесячных взносов. Работник фактически пишет заявление на перечисление ежемесячно, допустим 200руб, на свой накопительный счет, через несколько лет он пишет новое заявление на изменение суммы взносов к примеру на 100р и так может продолжаться Nное количество раз. Каждое его заявление это одна строчка в таблице с датой.
Задача: посчитать общую сумму взносов по каждому работнику на текущую дату и вывести в форме.
Если сущ. только одна строчка, то не проблема от текущей даты отнять указанную и вывести кол-во месяцев, а как быть если две и более строк?
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
21.08.2017, 17:21
Ответы с готовыми решениями:

Подсчет количества полных месяцев между датами
плиз, помогите с кодом SQL на расчет количества полных месяцев между двумя датами

Найти количество месяцев между датами
1) Ввести две даты и определить количество месяцев между ними { struct vremya { DateTime...

Количество месяцев между двумя датами
Народ всем доброго времени суток. Помогите пожалуйста разобраться. Надо написать запрос для...

Вычислить количество месяцев и дней между датами
В общем-то не охота писать такой код самому. Как уже имеющими средствами (тем же DateTime)...

6
Эксперт MS Access
26818 / 14497 / 3192
Регистрация: 28.04.2012
Сообщений: 15,782
21.08.2017, 18:22 2
Если бы дали свою базу было бы точнее. Поэтому структурно в SQL.
Предположим в таблице есть поля КодСотрудника, ФИО, ДатаЗаявления, Сумма. Тогда строим запросы. Первый вспомогательный, назовем его Temp
SQL
1
SELECT DISTINCT КодСотрудника AS k, ФИО, ДатаЗаявления AS d, Сумма FROM Таблица
Второй запрос, на основании Temp, даст количество месяцев между датами
SQL
1
2
3
SELECT q1.k, q1.ФИО, MAX(Q1.d) AS НачДата, Q2.d AS КонДата, datediff("m", НачДата, КонДата) AS Месяцы, Сумма
FROM Temp AS Q1 INNER JOIN Temp AS Q2 ON (Q1.k<>Q2.k) AND (Q1.d<=Q2.d)
GROUP BY q1.k, Q2.d
Что теперь делать с этими интервалами Вам решать. Отсюда неясно содержание полей таблицы и что там в действительности пишется. Дается ли только прибавка к сумме, или полное значение вместе с прибавкой?
0
0 / 0 / 0
Регистрация: 13.02.2017
Сообщений: 7
21.08.2017, 23:09  [ТС] 3
mobile, второй запрос не пошел, приложил файл.
Я наверно неправильно озаглавил, только ввел этим в заблуждение. в целом вы все правильно поняли. Только ФИО по ключу "КодСотрудника" подтягивается из другой таблицы "работники", но это мелочи. А вот результатом первого или второго запроса(да хоть третьего, если потребуется) я бы хотел получить столбцы: КодСотрудника, ДатаЗаявления, Сумма, КолМесяцев(вот здесь либо разница от текущей даты либо от след записи). И получив эту таблицу на выходе я смогу путем простого перемножения двух ячеек и суммирования получить общую сумму взносов на тек дату. Это возможно реализовать?
Вложения
Тип файла: 7z Database11.7z (17.6 Кб, 15 просмотров)
0
Эксперт MS Access
26818 / 14497 / 3192
Регистрация: 28.04.2012
Сообщений: 15,782
21.08.2017, 23:40 4
Лучший ответ Сообщение было отмечено yanmax как решение

Решение

Вот такой запрос без вспомогательных
SQL
1
2
3
4
5
6
7
8
SELECT работники.[табельный], работники.ФИО, SUM(t.Месяцев*t.сумма) AS Всего
FROM работники INNER JOIN 
(SELECT q1.[табельный], q1.дата AS НачДата, MIN(nz(q2.дата, DATE())) AS КонДата, 
  datediff("m",НачДата,КонДата) AS Месяцев, q1.сумма
  FROM взносы q1 LEFT JOIN взносы q2 ON (q1.[табельный]=q2.[табельный]) AND (q1.дата<q2.дата)
  GROUP BY q1.табельный, q1.дата, q1.сумма) t 
ON работники.[табельный]=t.[табельный]
GROUP BY работники.[табельный], работники.ФИО
1
0 / 0 / 0
Регистрация: 13.02.2017
Сообщений: 7
22.08.2017, 10:46  [ТС] 5
mobile, спасибо! Все работает. Только я не подумал сразу еще об одном нюансе. Сейчас фактическая дата начисления взноса в общую сумму - это первое число месяца. А как сделать "15 число каждого месяца" датой зачисления? Хотя тут достаточно сделать такое условие для последнего "текущего месяца".

Добавлено через 13 минут
mobile, извиняюсь поторопился. Даже не так. Фактическое зачисление происходит на 15 число след месяца, т.е если заявление написано в августе, то зачисление произойдет 15 сентября. где поставить "-1 месяц" в запросе? (для текущей даты "-1" делать не надо, если наступил сентябрь значит начислилось.) очень буду благодарен. Спасибо
0
Эксперт MS Access
26818 / 14497 / 3192
Регистрация: 28.04.2012
Сообщений: 15,782
22.08.2017, 11:01 6
Цитата Сообщение от yanmax Посмотреть сообщение
Фактическое зачисление происходит на 15 число след месяца, т.е если заявление написано в августе, то зачисление произойдет 15 сентября. где поставить "-1 месяц" в запросе? (для текущей даты "-1" делать не надо, если наступил сентябрь значит начислилось.
SQL
1
2
3
4
5
6
7
8
SELECT работники.[табельный], работники.ФИО, SUM(iif(t.Месяцев<=1,0,t.Месяцев-1)*t.сумма) AS Всего
FROM работники INNER JOIN 
(SELECT q1.[табельный], q1.дата AS НачДата, MIN(nz(q2.дата, DATE())) AS КонДата, 
  datediff("m",НачДата,КонДата) AS Месяцев, q1.сумма
  FROM взносы q1 LEFT JOIN взносы q2 ON (q1.[табельный]=q2.[табельный]) AND (q1.дата<q2.дата)
  GROUP BY q1.табельный, q1.дата, q1.сумма) t 
ON работники.[табельный]=t.[табельный]
GROUP BY работники.[табельный], работники.ФИО
0
0 / 0 / 0
Регистрация: 13.02.2017
Сообщений: 7
22.08.2017, 14:25  [ТС] 7
Спасибо, вопрос решен!!! Последний код (сообщение №6) это уже лишняя заморочка получилась. Я немного запутался. И он делает неверным результаты расчетов. Уменьшает каждое слагаемое на 1 и в итоге получается, что если у меня три строчки, то на 3 месяца меньше сумма. А оно и так правильно работало в сообщении №4.
0
22.08.2017, 14:25
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
22.08.2017, 14:25
Помогаю со студенческими работами здесь

Количество лет, месяцев, дней между датами
Здравствуйте. Может подскажите как вывести количество лет месяцев дней между двумя датами? спасибо...

Количество полных месяцев между двумя датами
Подскажите пожалуйста!) Имеются две даты, как подсчитать количество полных месяцев между ними?

Посчитать количество месяцев между двумя датами
Добрый день! Нужно посчитать количество полных месяцев между двумя датами. Пишу: ...

Рассчитать количество месяцев и дней между двумя датами
Нужна ваша помощь. Необходимо расчитать количество месяц и дней или только количество дней между...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
Счётчик на базе сумматоров + регистров и генератора сигналов согласования.
Hrethgir 07.01.2025
Создан с целью проверки скорости асинхронной логики: ранее описанного сумматора и предополагаемых fast регистров. Регистры созданы на базе ранее описанного, предполагаемого fast триггера. То-есть. . .
Как перейти с Options API на Composition API в Vue.js
BasicMan 06.01.2025
Почему переход на Composition API актуален В мире современной веб-разработки фреймворк Vue. js продолжает эволюционировать, предлагая разработчикам все более совершенные инструменты для создания. . .
Архитектура современных процессоров
inter-admin 06.01.2025
Процессор (центральный процессор, ЦП) является основным вычислительным устройством компьютера, которое выполняет обработку данных и управляет работой всех остальных компонентов системы. Архитектура. . .
История создания реляционной модели баз данных, правила Кодда
Programming 06.01.2025
Предпосылки создания реляционной модели В конце 1960-х годов компьютерная индустрия столкнулась с серьезными проблемами в области управления данными. Существовавшие на тот момент модели данных -. . .
Полезные поделки на Arduino, которые можно сделать самому
raxper 06.01.2025
Arduino как платформа для творчества Arduino представляет собой удивительную платформу для технического творчества, которая открывает безграничные возможности для создания уникальных проектов. Эта. . .
Подборка решений задач на Python
IT_Exp 06.01.2025
Целью данной подборки является предоставление возможности ознакомиться с различными задачами и их решениями на Python, что может быть полезно как для начинающих, так и для опытных программистов. . . .
С чего начать программировать микроконтроллер­­ы
raxper 06.01.2025
Введение в мир микроконтроллеров Микроконтроллеры стали неотъемлемой частью современного мира, окружая нас повсюду: от простых бытовых приборов до сложных промышленных систем. Эти маленькие. . .
Из чего собрать игровой компьютер
inter-admin 06.01.2025
Сборка игрового компьютера требует особого внимания к выбору комплектующих и их совместимости. Правильно собранный игровой ПК не только обеспечивает комфортный геймплей в современных играх, но и. . .
Обновление сайта www.historian.b­y
Reglage 05.01.2025
Обещал подвести итоги 2024 года для сайта. Однако начну с того, что изменилось за неделю. Добавил краткий урок по последовательности действий при анализе вредоносных файлов и значительно улучшил урок. . .
Как использовать GraphQL в C# с HotChocolate
Programming 05.01.2025
GraphQL — это современный подход к разработке API, который позволяет клиентам запрашивать только те данные, которые им необходимы. Это делает взаимодействие с API более гибким и эффективным по. . .
Модель полного двоичного сумматора с помощью логических операций (python)
AlexSky-coder 04.01.2025
def binSum(x:list, y:list): s=^y] p=x and y for i in range(1,len(x)): s. append((x^y)^p) p=(x and y)or(p and (x or y)) return s x=list() y=list()
Это мы не проходили, это нам не задавали...(аси­­­­­­­­­­­­­­­­­­­­­­­­­­х­р­о­н­­н­­­ы­­й счётчик с управляющим сигналом зад
Hrethgir 04.01.2025
Асинхронный счётчик на сумматорах (шестиразрядный по числу диодов на плате, но наверное разрядов будет больше - восемь или шестнадцать, а диоды на старшие), так как триггеры прошли тестирование и. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru