2016-08-10 7 views
-2

У меня есть две базы данных с двумя одинаковыми таблицами:результаты объединения двух баз данных запроса

Database1

id   date    value 
---  -----------  --------- 
1   2016-05-01  234 
2   2016-05-02  567 
3   2016-05-03  800 
4   2016-05-03  300 

database2

id   date    value 
---  -----------  --------- 
1   2016-04-20  900 
2   2016-05-02  455 
3   2016-05-03  90 
4   2016-05-02  855 

У меня есть этот запрос для каждой базы данных:

SELECT date, SUM(value) As TOTAL FROM tablename 
WHERE date >= DATE_SUB(NOW() , INTERVAL 1 YEAR) 
GROUP BY date ORDER BY date 

возвращающих эти результаты:

 Database1        Database2 
date   TOTAL      date   TOTAL 
------  ---------     -------  ------- 
2016-05-01  234      2016-04-20  900 
2016-05-02  567      2016-05-02  1310 
2016-05-03  1100      2016-05-03  90 

Теперь я хочу запрос, который будет сочетать в себе эти два результата базы на сегодняшний день Мой ожидается выход:

 Cobined Results 
date   TOTAL_DB1  TOTAL_DB2 
------  ---------  ---------- 
2016-04-20  0    900  
2016-05-01  234     0   
2016-05-02  567    1310 
2016-05-03 1100    90 

ответ

2

Использование union all, а затем сделать агрегацию путем группа date:

SELECT `date`, sum(TOTAL_DB1) as TOTAL_DB1, sum(TOTAL_DB2) as TOTAL_DB2 
FROM (
    SELECT date, SUM(value) As TOTAL_DB1, 0 AS TOTAL_DB2 FROM Database1 
    WHERE date >= DATE_SUB(NOW() , INTERVAL 1 YEAR) 
    GROUP BY date 
    UNION ALL 
    SELECT date, 0 AS TOTAL_DB1, SUM(value) As TOTAL_DB2 FROM Database2 
    WHERE date >= DATE_SUB(NOW() , INTERVAL 1 YEAR) 
    GROUP BY date 
) t 
GROUP BY `date` 
ORDER BY `date` 

Check Demo Here

+0

Приятный и чистый, спасибо за демонстрацию тоже –