ホームページ > データベース > 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 に基づいてレコードを照合します。カラム。これにより、トランザクションが空の日付レコードとマージされ、毎日の合計売上高を計算し、最近のトランザクションと空の行の両方を表示できるようになります。

結果のクエリは、過去 7 件の包括的な概要を効果的に提供します。販売取引の日数。記録された活動がなかった日も考慮されます。

参照用の完全なクエリは次のとおりです:

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 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート