sql >> データベース >  >> RDS >> Mysql

毎日発生しないイベントの毎日のカウントを取得する

    customerに表示されていない日も含め、すべての日を一覧表示する方法を探しています。 テーブル。これはSQLの首の悪名高い痛みです。これは、SQLの純粋な形式では、基数、日数など、何でも連続したシーケンスの概念が欠けているためです。

    したがって、連続する基数や日付などのソースを含むテーブルを導入してから、既存のデータをそのテーブルに左結合する必要があります。

    それを行うにはいくつかの方法があります。 1つは、自分でcalendarを作成することです。 現在の10年または世紀などの毎日の行を含むテーブルに参加します。 (このテーブルは、最新のデータベースの機能と比較してそれほど大きくはありません。

    そのテーブルがあり、dateという名前の列があるとします。 。次に、これを行います。

     SELECT calendar.date AS created,
            ISNULL(a.customer_count, 0) AS customer_count
       FROM calendar
       LEFT JOIN ( 
                SELECT COUNT(*) AS customer_count,
                       DATE(created) AS created
                  FROM customer
                 GROUP BY DATE(created)
            ) a ON calendar.date = a.created
       WHERE calendar.date BETWEEN start AND finish 
       ORDER BY calendar.date
    

    いくつかのことに注意してください。まず、LEFT JOIN カレンダーテーブルからデータセットへ。通常のJOINを使用する場合 データセットにデータがない場合、カレンダーの行が抑制されます。

    次に、ISNULL トップレベルのSELECT データセットから欠落しているnull値をゼロ値に変換します。

    さて、あなたは尋ねます、どこでそのカレンダーテーブルを手に入れることができますか?それを調べて、理解できない場合は別の質問をすることをお勧めします。

    これについて少しエッセイを書きました。これはここにあります。 http://www.plumislandmedia.net/mysql/filling-missing-data-sequences-cardinal-integers/



    1. Javaのランダムな数字

    2. SQL RANK()とROW_NUMBER()

    3. MySQLGUIプログラム

    4. DoctrineとSymfony2でカスタムDQL関数を使用するとエラーが発生します