2017-01-25 24 views
1

範囲内のすべての日付に参加は、私は次の表を持っているMySQLの

       Select administratieID AS AI, waarde WA, datum DT 
           from getalType 
           where getalTypeNaam = 'test' 
           and datum between DATE_SUB(NOW(), INTERVAL 10 DAY) and DATE_SUB(NOW(), INTERVAL 15 DAY) 
           order by datum 

私が欲しいのは、私がどこのすべての日付の選択を行うことができるということですその日付に対応するデータベースに何もない場合でも、指定された日付の間に返されます。私は値がない。この場合にもしたいが、その場合には、私はお返しに0

は、だから私は、この必要な値を返すようにしたい:

date  administratieID waarde 
10-10-2016 xxx     10 
11-10-2016 xxx     0 <-- no data available 
12-10-2016 xxx     40 
13-10-2016 xxx     9 
14-10-2016 xxx     0 <-- no data available 

は今、私はこれを取得します

date administratieID waarde 10-10-2016 xxx 10 12-10-2016 xxx 40 13-10-2016 xxx 9 
+0

あなたは現在何を得ていましたか、私は間にparamsを変更します。実際に確認していること2017-01-20と2017-01-15 'expr [NOT] BETWEEN begin_expr AND end_expr;' _BETWEEN演算子は、exprの値がbegin_exprの値以上(> =)であればtrueを返します。 end_exprの値以上(<=)、それ以外の場合は0を返します。 – JustOnUnderMillions

+1

アプリケーションコードに欠落した結果のロジックを処理します。 – Strawberry

+0

@JustOnUnderMillions私は今取得したもので編集しました。 –

答えて

1

あり、これを行うための方法がありますが、彼らは非常にハックです...

一つは、中を持っているだろうあなたが知っているダミーテーブルを、少なくとも日付範囲内の最大日数と同じ数のレコードを持つダミーテーブルを使用してください。

SET @date = DATE_SUB(NOW(), INTERVAL 15 DAY); #or whatever the earliest date you need is 



SELECT DISTINCT 
     IFNULL(administratieID,'XXX') AS AI 
    , IFNULL(waarde,0) AS WA 
    , all_dates AS DT 
FROM 
    (SELECT @date:=DATE_ADD(@date, INTERVAL 1 DAY) AS all_dates 
    FROM 
    my_dummy_table_with_lots_of_records 
    WHERE @date >= DATE_SUB(NOW(), INTERVAL 15 DAY) AND @date <= DATE_SUB(NOW(), INTERVAL 10 DAY)) d LEFT JOIN 

    getalType t ON 
     DATE_FORMAT(all_dates,'%Y-%m-%d') = DATE_FORMAT(t.datum,'%Y-%m-%d') 
WHERE 
    IFNULL(getalTypeNaam, 'Test') = 'Test' #if there's no data we still need to return something 

ORDER BY all_dates; 

もう一つの簡単な方法は、ちょうどあなたが参加する中で使用できる「all_dates」と呼ばれるテーブルを、持っていることです。そして、あなたはこのような何かを行うことができます。テーブルには1つの列「datum」があり、getalTypeテーブルで使用できるすべての可能な日付が入力されます。これはトリガでも行うことができます。

次に、上記の派生したナンセンスをすべて実行するのではなく、この表にリンクします。

これにより、初期化が必要な変数がないため、複数のSQL文を使用する必要がなくなります。

+0

ところで、誰かが私がナッツだと思った場合、私は上記のSQLをテストし、目的のデータセットを返します。それは理論的ではない。 –

+0

また、非常によく似た問題と解決策があります。 https://stackoverflow.com/questions/1046865/mysql-select-all-dates-in-a-range-even-if-no-records-present?rq=1 –

+0

本当にありがとう、私は幾分理解しています。なぜか..(やや) –

関連する問題