2013-10-06 37 views
1

我有3个表,其中包含一些记录有一个日期和一个数值(表不能被合并)。我想用表格中的信息组成条形图。条形图按日期分组,并应显示最近七天。mysql多表选择最近7天

早些时候,我有两个表,并使用下面的查询方案:

SELECT 
    t.credits1, 
    t.credits2, 
    t.date 
FROM 
    (
     (
      SELECT 
       t1.credits1, 
       t2.credits2, 
       t1.date 
      FROM 
       (
        SELECT 
         SUM(credits) AS credits1, 
         date 
        FROM 
         table1 
        WHERE 
         table1.date >= DATE_SUB(CURDATE(), INTERVAL 7 DAY) 
        GROUP BY 
         DATE(table1.date) 
       ) t1 

       LEFT JOIN 
       (
        SELECT 
         SUM(credits) AS credits2, 
         date 
        FROM 
         table2 
        WHERE 
         table2.date >= DATE_SUB(CURDATE(), INTERVAL 7 DAY) 
        GROUP BY 
         DATE(table2.date) 
       ) t2 
       ON t1.date = t2.date 
     ) 
     UNION 
     (
      SELECT 
       t1.credits1, 
       t2.credits2, 
       t1.date 
      FROM 
       (
        SELECT 
         SUM(credits) AS credits1, 
         date 
        FROM 
         table1 
        WHERE 
         table1.date >= DATE_SUB(CURDATE(), INTERVAL 7 DAY) 
        GROUP BY 
         DATE(table1.date) 
       ) t1 

       RIGHT JOIN 
       (
        SELECT 
         SUM(credits) AS credits2, 
         date 
        FROM 
         table2 
        WHERE 
         table2.date >= DATE_SUB(CURDATE(), INTERVAL 7 DAY) 
        GROUP BY 
         DATE(table2.date) 
       ) t2 
       ON t1.date = t2.date 
     ) 
    ) t GROUP BY 
DATE(date) 

(伪代码)

但我怎么能做到这一点有超过2个表? 是否有机会将过去7天的日期设置为基准,以便每次获得7条记录?

指出问题:如果我没有记录在第一张表中的一天,我不会从那天的其他表中获取记录。

回答

2

我假设3个表具有相似的模式?尝试使用UNION ALL将表连接在一起。

SELECT ABB1.date, SUM(ABB1.credit) AS daily_total 
FROM 
    (SELECT date, credits 
    FROM table1 

    UNION ALL 

    SELECT date, credits 
    FROM table1 

    UNION ALL 

    SELECT date, credits 
    FROM table2) AS ABB1 
WHERE DATE >= DATE_SUB(CURDATE(), INTERVAL 7 DAY) 
+0

非常感谢。 :) – Iwan1993