首页 > 数据库 > mysql教程 > 如何从 MySQL 表中检索过去 7 天的完整销售数据,包括没有交易的天数?

如何从 MySQL 表中检索过去 7 天的完整销售数据,包括没有交易的天数?

Barbara Streisand
发布: 2024-12-29 13:58:11
原创
504 人浏览过

How to Retrieve Complete Sales Data for the Last Seven Days from a MySQL Table, Including Days with No Transactions?

从 MySQL 单表检索全面数据:覆盖空行和最近的事务

在本次讨论中,我们旨在解决一个共同的挑战查询数据库时面临的问题是:如何将最近的交易和空天数合并到结果中。具体来说,我们将重点检索过去 7 天的销售交易,同时包括没有任何活动的日子的空行。

首先,我们将利用 COALESCE() 函数的功能,该函数使我们能够替换如果表达式的计算结果为 NULL,则为默认值。在本例中,我们将使用 0 作为空行的默认值。

然后我们将创建一个子查询来生成过去 7 天的完整日期列表。这将作为完整结果集的基础,确保包含空行。

最后,我们将在生成的日期列表和交易表之间执行 LEFT JOIN 操作,根据 PURCHASE_DATE 匹配记录柱子。这会将交易与空日期记录合并,使我们能够计算每天的总销售额并显示最近的交易和空行。

生成的查询将有效地提供过去七次的全面概述销售交易天数,占没有记录活动的天数。

以下是完整的查询供参考:

SELECT 
    t1.purchase_date,
    COALESCE(SUM(t1.amount + t2.amount), 0) AS amount
FROM 
    (
        SELECT DATE_FORMAT(a.Date,'%Y-%m-%d') AS purchase_date,
                '0' AS amount
        FROM 
            (
                SELECT CURDATE() - INTERVAL (a.a + (10 * b.a) + (100 * c.a)) DAY AS Date
                FROM 
                    (SELECT 0 AS a UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9) AS a
                CROSS JOIN 
                    (SELECT 0 AS a UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9) AS b
                CROSS JOIN 
                    (SELECT 0 AS a UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9) AS c
            ) a
        WHERE 
            a.Date BETWEEN NOW() - INTERVAL 7 DAY AND NOW()
    ) t1
LEFT JOIN 
    (
        SELECT DATE_FORMAT(purchase_date, '%Y-%m-%d') AS purchase_date,
                COALESCE(SUM(amount), 0) AS amount
        FROM 
            transactions
        WHERE 
            purchase_date BETWEEN NOW() - INTERVAL 7 DAY AND NOW()
        GROUP BY 
            purchase_date
    ) t2
ON 
    t2.purchase_date = t1.purchase_date
GROUP BY 
    t1.purchase_date
ORDER BY 
    t1.purchase_date DESC;
登录后复制

以上是如何从 MySQL 表中检索过去 7 天的完整销售数据,包括没有交易的天数?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板