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

存在しない日付のゼロを返しますMYSQLGROUPBY

    通常、このタイプのことは、値テーブルと結合することで実現します。 、つまり、関心のあるすべての値を含むテーブル。

    通常の値テーブルには、たとえば、0から1,000までのすべての整数値、または特定の期間のすべての日付が含まれる場合があります。多くの場合、値テーブルには必要以上の値が含まれており、WHERE句にフィルターを追加することで必要な正確な出力を取得します。

    この場合、日付を含むそのようなテーブルが必要になります。このテーブルの名前がValTableDatesであり、2005年1月から2010年12月までのすべての日付が含まれているとすると、クエリは次のようになります。

    SELECT AVG(data) AS data, VT.ValDate
    FROM ValTableDates VT
    LEFT JOIN  table T ON T.dateReg = VT.ValDate
    WHERE VT.ValDate > [Some Start Date] and VT < [Some End Date]
    GROUP BY YEAR(dateReg), MONTH(dateReg), DAY(dateReg) 
    ORDER BY dateReg
    

    上記のクエリでは、NULLではなくゼロの値を取得するために少し調整が必要な場合がありますが、重要な点は、値テーブルは通常、欠落しているデータポイントの出力レコードを提供する最も簡単な方法であるということです。
    別の方法として、サブクエリ内で目的の[日付]シーケンスを生成する関数/式ですが、これは一般的に効率が低く、エラーが発生しやすくなります。




    1. メッセージ配列の最後のメッセージを表示する

    2. MySQLdumpをローカルコンピューターに自動化する(Windows)

    3. GROUPBYとORDERBY

    4. Oracleで時差を特定の形式に変換する