mysql多表选择最近7天

时间:2013-10-06 09:10:19

标签: mysql full-outer-join

我有3个表,包含一些具有日期和数值的记录(这些表不能合并)。我想使用表格中的信息来构成条形图。条形图按天分组,应显示最近七天。

之前我有两个表并使用以下查询方案:

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条记录?

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

1 个答案:

答案 0 :(得分: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)