powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Помогите решить задачу.
15 сообщений из 15, страница 1 из 1
Помогите решить задачу.
    #35650902
AINS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я начинающий программист, вот придумал задачу, может быть кто-то сможет решить? В общем задача:

Есть таблица, в которой указан id, user, date, sum, из таблицы надо выбрать тремя разными способами, какая з/п(sum) была у user скажем 15.02.2001? Число 15 может быть разным и его может не быть в таблице.

id user date sum
1 Пупкин 01.01.2001 1000
2 Пупкин 01.02.2001 1500
3 Пупкин 01.03.2001 2000
4 Пупкин 01.04.2001 2500
5 Пупкин 01.05.2001 3000
6 пупкин 01.06.2001 3500
...
Рейтинг: 0 / 0
Помогите решить задачу.
    #35650917
freestyle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AINS Число 15 может быть разным
Это как понимать?
...
Рейтинг: 0 / 0
Помогите решить задачу.
    #35650932
Naf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AINSтремя разными способами
а что не пятью?

Код: plaintext
1.
2.
3.
4.
SELECT TOP  1  sum
FROM Table
WHERE user=:user AND date<=:date
ORDER BY date DESC
...
Рейтинг: 0 / 0
Помогите решить задачу.
    #35650945
AINS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Число 15 это день в месяце, выборка по числу может быть разной, 5-го числа или 20-го, факт в том что этого числа в таблице нет как видно там только первый числа каждого месяца.
...
Рейтинг: 0 / 0
Помогите решить задачу.
    #35651380
albert t
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
AINS,

1. Если это реальная задача
Мой скромный опыт подсказывает что необходимо делать паразитную таблицу Год куда внести 365 дней и потом к ней уже привязываться. Если вопрос про зарплату, то потом пойдут вопросы про праздничные дни, среднее количество рабочих дней и т д. Набором функций для работы с датой можно, но замахаешся и велика вероятность ошибки. Лучше в лоб. Тем более что заполнение таблицы Год автоматизируется.

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

2. Если это тест или курсовая работа.
Кувыркаться с SQL функциями для работы с датой
...
Рейтинг: 0 / 0
Помогите решить задачу.
    #35651410
KOT MATPOCKuH
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Т.е. тебе нужно найти значение с максимальной датой <= заданной.
Классическая задача!
Встречается почти в каждом проекте!
На стандарте решается тупо: в подзапросе находим максимальную дату, во внешнем запросе получаем искомое значение по нужным критериям и дате = найденной в подзапросе.
Вообще, если критериев много, запрос большой, медленный, то дважды его переписывать - не самое лучшее решение, но стандарт другого не дает (на сколько я знаю).

В различных СУБД иногда встречаются более интересные решения, но это - специфика.
...
Рейтинг: 0 / 0
Помогите решить задачу.
    #35651424
KOT MATPOCKuH
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А, да!
Забыл подколоть: а что за таблица-то?
Если, например, "таблица приказов о назначении ставки з/п с такого-то числа", то мое решение правильное.
Если это срез значений на какие-то моменты, то, наверно, нужно на значения в точках натягивать сплайн и по нему вычислять нужное.
...
Рейтинг: 0 / 0
Помогите решить задачу.
    #35651472
albert t
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
KOT MATPOCKuH нужно на значения в точках натягивать сплайн и по нему вычислять нужное.

Может обойтись линейной интерполяцией? :)

Надо всё-таки услышать правильный вопрос. Я не понял суть задачи. Или она очень простая или неоправданно сложная. В реальной системе про зарплату и начисления, скорее всего последний вариант.
...
Рейтинг: 0 / 0
Помогите решить задачу.
    #35651524
Фотография proposed amendment
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
albert tМожет обойтись линейной интерполяцией? :)


это 5-ть :)
...
Рейтинг: 0 / 0
Помогите решить задачу.
    #35651552
albert t
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
albert t,

То есть если вопрос звучит из реальной бухгалтерии "Сколько денег рабочий заработал до 20-го числа в ноябре прошлого года, когда был выходным День рыбака, а субботу перенсли на пятницу" это один вопрос

а если просто найти между какими датами находится дата которую нужно узнать, и выбрать зарпалту за этот месяц, тогда это одна строка как Naf и написал.
...
Рейтинг: 0 / 0
Помогите решить задачу.
    #35651926
AINS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
albert talbert t,

То есть если вопрос звучит из реальной бухгалтерии "Сколько денег рабочий заработал до 20-го числа в ноябре прошлого года, когда был выходным День рыбака, а субботу перенсли на пятницу" это один вопрос

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

По условию задчи надо найти какая зарплата была у usera 15 числа, то есть идет повышение к примеру не каждого месяца как описано в таблице а скажем раз в квартал, тогда запрос будет такой, какая зарплата была у человека 15 февраля? А в таблице прописана только дата повыешния ставки и сумма, ну соответственно фамилия.
...
Рейтинг: 0 / 0
Помогите решить задачу.
    #35652694
мде
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Дак и в чем проблема?

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
Oracle Database 10g Enterprise Edition Release  10 . 2 . 0 . 1 . 0 

with t as (
select  1  id, 'A' name, to_date('01.01.2001') dat,  1000  sum from dual union all
select  2  id, 'A' name, to_date('01.02.2001') dat,  1500  sum from dual union all
select  3  id, 'A' name, to_date('01.03.2001') dat,  2000  sum from dual union all
select  4  id, 'A' name, to_date('01.04.2001') dat,  2500  sum from dual union all
select  5  id, 'A' name, to_date('01.05.2001') dat,  3000  sum from dual union all
select  6  id, 'A' name, to_date('01.06.2001') dat,  3500  sum from dual 
)
select sum from t where dat = (
select max(dat) from t where dat < to_date('24.04.2001'))
...
Рейтинг: 0 / 0
Помогите решить задачу.
    #35653208
korda
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
AINS, прямо сейчас здесь обсуждаем именно такую(если абстрагироваться от деталей) задачу.
...
Рейтинг: 0 / 0
Помогите решить задачу.
    #35653655
albert t
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
AINS,

Это просто. Юзай запрос Nuf.
...
Рейтинг: 0 / 0
Помогите решить задачу.
    #35655273
Фотография Cat2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
А я знаю четыре способа! А может быть и больше :(

Сумма на дату - это мелочи.

Вот когда надо на дату подсчитать разницу между расчетными и фактическим комунальнными платежами, с учетом того, что в предыдущие периоды действовали разные тарифы, льготы, базы расчета, сроки оплаты и множество другой муры, то вот это действительно забавно :)
...
Рейтинг: 0 / 0
15 сообщений из 15, страница 1 из 1
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Помогите решить задачу.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]