2

だから私は自分がしている仕事のデータを収集するテーブルを持っています。ジョブを作成するたびに、日付を割り当てます。これの問題は、仕事がない日がデータベースに保存されていないため、データをグラフ化すると、仕事がなかった日が表示されないことです。

私の現在のクエリは次のようになります。

SELECT job_data_date, SUM(job_data_invoice_amount) as job_data_date_income 
FROM job_data 
WHERE job_data_date >= '2010-05-05' 
GROUP BY job_data_date 
ORDER BY job_data_date;

出力は次のとおりです。

|   job_data_date   |   job_data_date_income    |
|   2010-05-17      |   125                     |
|   2010-05-18      |   190                     |
|   2010-05-20      |   170                     |

出力例からわかるよう2010-05-19に、そこに保存されていないため、結果には表示されません。

欠落している日付を表示する方法はありますか?

ありがとうございました、

マラト

4

2 に答える 2

2

1 つのアイデアは、表示するすべての日付を含むテーブルを作成し、そのテーブルで外部結合を実行することです。

したがって、1 つの列 (job_data_date) を持つ alldates というテーブルがある場合:

SELECT ad.job_data_date, SUM(job_data_invoice_amount) as job_data_date_income 
FROM alldates ad left outer join job_data jd on ad.job_data_date = jd.job_data_date 
WHERE ad.job_data_date >= '2010-05-05' 
GROUP BY ad.job_data_date 
ORDER BY ad.job_data_date;

欠点は、表示するすべての日付をこのテーブルに入力しておく必要があることです。

于 2010-06-04T22:15:40.457 に答える
1

少なくともMySQLでは、これまでに考案されたすべての日付でテーブルを作成せずに、純粋なSQLを使用してこれを行う合理的な方法はありません。最良の選択肢は、そのクエリの結果を使用しているアプリケーションを変更して、穴自体を埋めることです。受け取った値のみをグラフ化するのではなく、単純なループで独自の値のセットを構築します。一度に 1 日ずつカウントアップし、クエリからの値が利用可能な場合はすべて入力します。

于 2010-06-04T22:15:19.287 に答える