【问题标题】:mysql multiple tables select last 7 daysmysql 多表选择过去 7 天
【发布时间】:2013-10-12 23:38:12
【问题描述】:

我有 3 个表,其中包含一些具有日期和数值的记录(这些表无法合并)。我想使用表格中的信息制作条形图。条形图按天分组,应显示过去 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 条记录?

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

【问题讨论】:

    标签: mysql full-outer-join


    【解决方案1】:

    我假设这 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)
    

    【讨论】:

      猜你喜欢
      • 2014-08-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多