File: /www/exchange2/sql/archive/2016-07-08-271.sql
DELIMITER $$
CREATE FUNCTION `fixLeapYear`(`end_date` DATE, `start_date` DATE)
RETURNS DATE
LANGUAGE SQL
NOT DETERMINISTIC
CONTAINS SQL
SQL SECURITY DEFINER
COMMENT ''
BEGIN
IF((YEAR(end_date) % 4 != 0) OR ((YEAR(end_date) % 100 = 0) AND (YEAR(end_date) % 400 != 0))) THEN RETURN end_date;
ELSEIF DATE_FORMAT(end_date,'%Y%m%d')>CONCAT(DATE_FORMAT(end_date,'%Y'),'0229') AND DATE_FORMAT(start_date,'%Y%m%d')<CONCAT(DATE_FORMAT(end_date,'%Y'),'0229') THEN RETURN DATE_ADD(end_date,INTERVAL -1 DAY);
ELSE RETURN end_date;
END IF;
END $$
DELIMITER ;
SET @end_date=CURDATE();
SELECT T.*,
SUM(IF(T.investment_type = 1, T.amount, 0)) AS Receipts,
SUM(IF(T.investment_type = 8, T.amount, 0)) AS Additions,
SUM(IF(T.investment_type = 9, T.amount, 0)) AS Renewals,
SUM(IF(T.investment_type = 5, T.amount, 0)) AS Compounds,
SUM(IF(T.investment_type = 5, 1, 0)) AS CompoundsCount,
SUM(IF(T.investment_type = 2, T.amount, 0)) AS Coupons,
SUM(IF(T.investment_type = 4, T.amount, 0)) AS FullRedemption,
SUM(IF(T.investment_type = 4, ABS(IF(T.investment_type=4,T.change_principal, T.amount) *(T.buy_rate/100)/360*(DATEDIFF(fixLeapYear(IF(T.end_date>@end_date,@end_date,T.end_date),T.start_date) ,T.start_date)*0.9863)), 0)) AS FullRedemptionYield,
SUM(IF(T.investment_type = 3, T.amount, 0)) AS PartialRedemptions,
SUM(IF(T.investment_type != 4,ABS(IF(T.investment_type=4,T.change_principal, T.amount) *(T.buy_rate/100)/360*(DATEDIFF(fixLeapYear(IF(T.end_date>@end_date,@end_date,T.end_date),T.start_date) ,T.start_date)*0.9863)),0)) AS AllYield,
SUM(IF(T.investment_type=2,T.amount,0) + IF(T.investment_type = 4, ABS(IF(T.investment_type=4,T.change_principal, T.amount) *(T.buy_rate/100)/360*(DATEDIFF(fixLeapYear(IF(T.end_date>@end_date,@end_date,T.end_date),T.start_date) ,T.start_date)*0.9863)), 0)) AS PaidYield,
'ui' AS RetailedYield
FROM (
SELECT investor_investments.investment_id, investor_investments.investment_date as start_date,
IF(investor_investments.investment_type NOT IN (3),investor_investments.amount,-1* investor_investments.amount) as amount,
investor_investments.change_principal,
IF(investor_investments.investment_type=4,changes.buy_rate,IFNULL(rpas.buy_rate,investor_investments.buy_rate)) as buy_rate, investor_investments.investment_type, transaction_types.transaction_name,
IF(changes.investment_date IS NOT NULL AND changes.investment_type IN (1,5,9),
changes.investment_date,
IF (
rpas.investment_date IS NOT NULL AND rpas.investment_type IN (1,5,9),
IFNULL(rpas.early_exit,DATE_ADD(rpas.investment_date,INTERVAL rpas.months MONTH)) ,
IFNULL(investor_investments.early_exit,DATE_ADD(investor_investments.investment_date,INTERVAL investor_investments.months MONTH))
)
)
as end_date,
investor_investments.change_id, investor_investments.months, investor_investments.investment_group
FROM investor_investments
LEFT JOIN transaction_types ON transaction_types.type_id=1 AND transaction_types.transaction_id = investor_investments.investment_type
LEFT JOIN investor_investments as changes ON changes.change_id = investor_investments.investment_id
LEFT JOIN investor_investments as rpas ON rpas.investment_id = investor_investments.change_id
WHERE investor_investments.investor_id=28 AND investor_investments.status=1
ORDER BY investor_investments.investment_group, investor_investments.investment_date, investor_investments.investment_id
) AS T
GROUP BY T.investment_group