2016-05-26 3 views
0

Это мой текущий запрос:MySQL UNION - Репликация Sub Query

Select Month as ReqMonth1, 
    sum(TotalUsage) As ReqCount1, 
    sum(Memberbase) as Club_updates_Records1, 
    round(sum(TotalUsage)/sum(Memberbase)*100,0) AS UsagePerc 
from(
Select * from (
SELECT 
    CAST(DATE_FORMAT(Log_Date, '%b-%y') AS CHAR(100)) AS 'Month', 
    CAST(DATE_FORMAT(Log_Date, '%y-%m') AS CHAR(100)) AS 'Monthsort', 
    count(Requests.`fk_Members_ID`) AS TotalUsage, 
    0 as Memberbase 
FROM 
    `Requests` Requests INNER JOIN `Members` Members ON Requests.`fk_Members_ID` = Members.`ID` 
WHERE 
    cast(Requests.`Log_date` as date) BETWEEN date_sub(if($P{StartDate}>'2016-06-01',$P{StartDate},'2016-05-01'), Interval 4 month) and $P{EndDate} AND $P{EndDate} 
AND Members.`Club` = $P{Club} 
GROUP BY 
    CAST(DATE_FORMAT(Log_Date, '%M-%y') AS CHAR(100))) as A 

UNION ALL 

Select * from (
SELECT 
    CAST(DATE_FORMAT(Club_updates.`Update_Date`, '%b-%y') AS CHAR(100)) AS 'Month', 
    CAST(DATE_FORMAT(Club_updates.`Update_Date`, '%y-%m') AS CHAR(100)) AS 'Monthsort', 
    0 AS TotalUsage, 
    ifnull(max(Club_updates.`Records`),1) AS MemberBase 
FROM 
    `Club updates` Club_updates 
WHERE 
    cast(Club_updates.`Update_Date` as date) BETWEEN date_sub(if($P{StartDate}>'2016-06-01',$P{StartDate},'2016-05-01'), Interval 4 month) and $P{EndDate} AND $P{EndDate} 
AND Club_updates.`fk_Club` = $P{Club} 
GROUP BY CAST(DATE_FORMAT(Club_updates.`Update_Date`, '%M-%y') AS CHAR(100))) As B) as D 
group by Month 
Order by MonthSort 

Я пытаюсь копировать/добавить еще один суб запрос "A" с изменением на Close_Date поле вместо поля Log_Date в предложение WHERE. В основном получается сумма обоих подзапросов только в поле «ReqCount1».

Любая помощь будет оценена по достоинству.

ответ

0

Хорошо, получил его решить

вот решение (с дополнительным условием в выражении WHERE)

Select Month as ReqMonth1, 
    sum(TotalUsage) As ReqCount1, 
    sum(Memberbase) as Club_updates_Records1, 
    round(sum(TotalUsage)/sum(Memberbase)*100,0) AS UsagePerc 
from(
Select * from (
SELECT 
    CAST(DATE_FORMAT(Log_Date, '%b-%y') AS CHAR(100)) AS 'Month', 
    CAST(DATE_FORMAT(Log_Date, '%y-%m') AS CHAR(100)) AS 'Monthsort', 
    count(Requests.`fk_Members_ID`) AS TotalUsage, 
    0 as Memberbase 
FROM 
    `Requests` Requests INNER JOIN `Members` Members ON Requests.`fk_Members_ID` = Members.`ID` 
WHERE 
    cast(Requests.`Log_date` as date) BETWEEN date_sub(if($P{StartDate}>'2016-06-01',$P{StartDate},'2016-05-01'), Interval 4 month) and $P{EndDate} AND $P{EndDate} 
AND Members.`Club` = $P{Club} AND Requests.`Request_Type` <> 7 
GROUP BY 
    CAST(DATE_FORMAT(Log_Date, '%M-%y') AS CHAR(100))) as A 


UNION ALL 
Select * from (
SELECT 
    CAST(DATE_FORMAT(Close_Date, '%b-%y') AS CHAR(100)) AS 'Month', 
    CAST(DATE_FORMAT(Close_Date, '%y-%m') AS CHAR(100)) AS 'Monthsort', 
    count(Requests.`fk_Members_ID`) AS TotalUsage, 
    0 as Memberbase 
FROM 
    `Requests` Requests INNER JOIN `Members` Members ON Requests.`fk_Members_ID` = Members.`ID` 
WHERE 
    cast(Requests.`Close_Date` as date) BETWEEN date_sub(if($P{StartDate}>'2016-06-01',$P{StartDate},'2016-05-01'), Interval 4 month) and $P{EndDate} AND $P{EndDate} 
AND Members.`Club` = $P{Club} AND Requests.`Request_Type` = 7 
GROUP BY 
    CAST(DATE_FORMAT(Close_Date, '%M-%y') AS CHAR(100))) as G 

UNION ALL 


Select * from (
SELECT 
    CAST(DATE_FORMAT(Club_updates.`Update_Date`, '%b-%y') AS CHAR(100)) AS 'Month', 
    CAST(DATE_FORMAT(Club_updates.`Update_Date`, '%y-%m') AS CHAR(100)) AS 'Monthsort', 
    0 AS TotalUsage, 
    ifnull(max(Club_updates.`Records`),1) AS MemberBase 
FROM 
    `Club updates` Club_updates 
WHERE 
    cast(Club_updates.`Update_Date` as date) BETWEEN date_sub(if($P{StartDate}>'2016-06-01',$P{StartDate},'2016-05-01'), Interval 4 month) and $P{EndDate} AND $P{EndDate} 
AND Club_updates.`fk_Club` = $P{Club} 
GROUP BY CAST(DATE_FORMAT(Club_updates.`Update_Date`, '%M-%y') AS CHAR(100))) As B) as D 
group by Month 
Order by MonthSort