У меня есть набор данных с именем таблицы 'Closing_balance_child', как указано
![enter image description here](https://i.stack.imgur.com/9Lx5k.png)
Здесь я хочу получить AccountID
, где CurrBal
не равно OpeningBalance
следующего года YearMasterId
.
В качестве примера, давайте проверим первые 2 строки.
AccountID - 2060 , CompanyID - 1, YearMasterID = 2
AccountID - 2060 , CompanyID - 1, YearMasterID = 3
OpeningBalance
второго ряда не совпадает с CurrBal
первого.
Таким образом, ожидаемый результат составляет 2060,2061
Вот что я пытаюсь сделать
DELIMITER $$
DROP PROCEDURE IF EXISTS `curdemo11` $$
CREATE PROCEDURE `curdemo11`(OUT res VARCHAR(100))
BEGIN
DECLARE finished ,done BOOLEAN DEFAULT FALSE;
DECLARE a,i INT;
DECLARE accountID,companyID,yearMasterID INT;
DECLARE currClosing,curreOpening,previousBal DOUBLE(10,4);
DECLARE cur1 CURSOR FOR SELECT AccountID FROM (SELECT ID,AccountID,CompanyID,YearMasterID,CurrBal,OpeningBalance FROM
`Closing_balance_child`
WHERE CurrBal != '0.0000' AND OpeningBalance != '0.0000'
GROUP BY AccountID,CompanyID,YearMasterID) AS t
GROUP BY AccountID
HAVING COUNT(AccountID) > 1 LIMIT 2;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET finished = TRUE;
OPEN cur1;
cur1_loop : LOOP
FETCH FROM cur1 INTO a ;
IF finished THEN
CLOSE cur1;
LEAVE cur1_loop;
END IF;
BLOCK2: BEGIN
DECLARE cur2 CURSOR FOR SELECT AccountID,CompanyID,YearMasterID,CurrBal,OpeningBalance FROM
`Closing_balance_child`
WHERE AccountID = a;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1;
OPEN cur2;
cur2_loop1 : LOOP
FETCH FROM cur2 INTO accountID,companyID,yearMasterID,currClosing,curreOpening;
SET previousBal = currClosing;
SET i=0;
IF finished THEN
SET finished = FALSE;
CLOSE cur2;
LEAVE cur2_loop1;
END IF;
SET res = a;
IF (previousBal != curreOpening AND i != 0) THEN
SET res = a;
END IF;
SET i=i+1;
END LOOP cur2_loop1;
END BLOCK2;
END LOOP cur1_loop;
END $$
DELIMITER ;
CALL curdemo11(@res); SELECT @res;
Помощь будет высоко ценится