HEX
Server: Apache/2.2.15 (CentOS)
System: Linux ip-10-0-2-146.eu-west-1.compute.internal 2.6.32-754.35.1.el6.centos.plus.x86_64 #1 SMP Sat Nov 7 11:33:42 UTC 2020 x86_64
User: root (0)
PHP: 5.6.40
Disabled: NONE
Upload Files
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