2017-03-10 61 views
0

這是我的信用假表。sql調度器更新餘額留下

creditleaveid empid creditleavemonth creditedleaves 
1    21  March    1 

我使用的調度下月插入到信用卡/此表的平衡休假

DELIMITER $$ 
CREATE EVENT creditleavemonth 
ON SCHEDULE EVERY '1' MONTH 
STARTS '2017-02-01 00:00:00' 
DO 
BEGIN 
CALL spAddCreditLeaves; 
END$$ 

DELIMITER ; 

存儲過程spAddCreditLeaves是

DELIMITER $$ 

USE `attendance`$$ 

DROP PROCEDURE IF EXISTS `spAddCreditLeaves`$$ 

CREATE DEFINER=`root`@`localhost` PROCEDURE `spAddCreditLeaves`() 
BEGIN 
INSERT INTO creditleaves(empid,creditleavemonth)SELECT empid,MONTHNAME(CURDATE())FROM empdetails; 
END$$ 

DELIMITER ; 

現在我想更新的記錄通過檢查每個員工的上個月的記錄來插入月份。怎麼做?

+0

你的'creditleaves'表似乎沒有'year'字段。你不覺得這是必需的嗎? –

+0

是的...我要修改它。 – Prady

+0

這裏我想要的是當下一個調度程序運行...那個時候我想更新插入的記錄...信貸離開如果0那麼它應該是1如果它是1那麼它應該增加 – Prady

回答

0

我已經得到了我的答案。它工作得非常好。存儲過程-

USE `attendance`$$ 

DROP PROCEDURE IF EXISTS `spAddCreditLeaves`$$ 

CREATE DEFINER=`root`@`localhost` PROCEDURE `spAddCreditLeaves`() 
BEGIN 
IF MONTHNAME(CURDATE())='January' 
THEN 
INSERT INTO creditleaves(empid,creditleavemonth,creditmonthyear,creditedleaves) SELECT empid,MONTHNAME(CURDATE()),YEAR(CURDATE()),creditedleaves+1 FROM creditleaves WHERE empid IN (SELECT empid FROM empdetails GROUP BY empid) AND creditedleaves IN(SELECT creditedleaves FROM creditleaves WHERE creditleavemonth=MONTHNAME((CURDATE()-INTERVAL 1 MONTH)) AND creditmonthyear=YEAR((CURDATE()-INTERVAL 1 YEAR))); 
ELSE 
INSERT INTO creditleaves(empid,creditleavemonth,creditmonthyear,creditedleaves) SELECT empid,MONTHNAME(CURDATE()),YEAR(CURDATE()),creditedleaves+1 FROM creditleaves WHERE empid IN (SELECT empid FROM empdetails GROUP BY empid) AND creditedleaves IN(SELECT creditedleaves FROM creditleaves WHERE creditleavemonth=MONTHNAME((CURDATE()-INTERVAL 1 MONTH)) AND creditmonthyear=YEAR(CURDATE())); 
END IF; 
END$$ 

DELIMITER ;