Я пытаюсь реализовать процедуру в mysql, которая возвращает количество дней на основе расчета. Передается дата покупки (добавленная дата), а затем выполняется расчет. Должно быть относительно прямым, но я не могу заставить его работать. Я не уверен, что это подходящая ситуация для «оператора select», и я прошу прощения, если это очень просто, но это мой первый запуск процедур.
Если кто-нибудь может сказать мне, что мне делать, это будет очень признательно.
Спасибо!
У меня есть таблица с именем " калькуляция " (ТАБЛИЦА 3), которая содержит поле "elap_yend" (int), которое в настоящее время пусто, пока не будет вызвана хранимая процедура.
Таблица 1:
cid parent_cat category_name category_life
22 0 Office Equipment-M' 1080
23 0 Office Equipment-O' 1800
24 0 F & F' 3600
25 0 Staff assets', 1800
27 0 Motor vehicle', 2880
28 0 Air conditioner' 5400
29 0 Land & Building', 2160
30 0 Temporary Partition 365
31 0 Electrical Fittings 3600
32 0 Generator' 5400
33 0 Software' 1800
34 0 Computer-N' 2160
35 24 chair' 3600
Tble 2:
pid cid product_name product_price added_date cgst sgst igst total depre
60 22 RHFL\test\001 20000 2018-11-02 1800 1800 0 23600 o
61 27 RHFL\test\002 13500 2018-11-02 2345 2345 0 15930 12
62 29 RHFL\test\003 65000 2018-11-02 2345 2345 0 76700 12
63 31 RHFL\test\004 10000 2018-11-02 2345 2345 0 1180 12
64 24 RHFL\test\005 10000 2018-11-02 2345 2345 0 11800 1
65 24 RHFL\test\006 13500 2018-11-02 2345 2345 0 15930 12
66 34 RHFL\test\007 13500 2018-11-02 2345 2345 0 15930 12
67 22 RHFL\test\008 65004 2018-11-02 2345 2345 0 76704 12
68 25 RHFL\test\009 10000 0000-00-00 2345 2345 0 11800 12
69 22 RHFL\test\010 65000 0000-00-00 2345 2345 0 76700 10
70
Таблица 3: выходные данные хранимой процедуры должны отражаться в таблице ниже:
end_date elap_yend rem_days depre_cur cur_wdv depre_next next_wdv acc_depre
2018-11-02 0 0 0 0 0 0
Расчет выхода:
Выше приведен пример вывода с нуля. Это не точный вывод, но всякий раз, когда я вызываю хранимую процедуру, она должна выполнять приведенные ниже вычисления.
DELIMITER $$
CREATE PROCEDURE calculationTemp(
in till_yend date,
)
BEGIN
DECLARE till_yend date;
SELECT datediff(now(),added_date) INTO till_yend
FROM products
IF till_yend > 0 THEN
SET till_yend = select datediff(now(),added_date) from products;
ELSEIF till_yend < 0 THEN
SET till_yend = 0;
END IF;
insert into calculationTemp
END$$
Расчетные работы:
Конец года Elapsede:
elapsed_yend = добавленная дата (из таблицы продуктов (№: 2)) до каждого года 31 марта / xxxx.
Количество дней между этими двумя датами
оставшиеся дни = категория_жизни - (разница дат между добавленной датой (от продуктов (№: 1)) до даты)
category_life (из таблицы категорий (№: 1)) Пример: мобильный, его жизнь будет 1080 дней.
Амортизация за текущий год:
depreciation_cur = (depre / category_life) * elapsed_yend
Текущий год Записанное значение:
current_wdv = depre - depreciation_cur
Амортизация в следующем году:
depreciation_next = (depre / category_life) * D
D = разность дней между каждым годом 01 / апрель / xxxx до конечной даты (из таблицы расчета)
В следующем году записанное значение:
next_wdv = current_wdv - depreciation_next
Начисление амортизации:
накопление_депр = depreciation_cur + depreciation_next