2017-01-11 3 views
2

私は従業員のデータベースとその出席者があります。私は出席の日付範囲レポートを作成する必要があります。レコードが存在しなくても、日付範囲内のすべてのレコードを選択してください。

出席データベーステーブル

Database Schema

私は、クエリ

SELECT a.* FROM attendance a WHERE a.user_id=10 AND (a.date BETWEEN '2017-01-06' AND '2017-01-10') 

結果の下に使用しています: - 私はまた、すべての指定した日付範囲が、いくつかの日付のレコードのレコードをしたい Result by My Query

データベースには存在しません。日付にはnull値が対応しています下の画像に示すように、その日付まで。

Final Output I want

+0

私は間違って何か他のものは、クエリが間違っていないので、それだけで両方のケースで正しい日付とUSER_IDを、フィルタがあると思います。あなたは 'a.'を削除しようとすることができますし、ちょうど通常のクエリを行いますか? (SELECT *出席者WHERE user_id = 10 AND(日付はBETWEEN '2017-01-06' AND '2017-01-10') – Tosfera

+0

通常、アプリケーションコードのデータ表示に関する問題(行が抜けているなど)を処理します。 – Strawberry

+0

@Tosferaデータベースには、その日付のレコード(07,08)はありませんが、上記の画像に示されている間隔の欠落を含む応答が必要です。 –

答えて

0

これを試してみてください。私はそれを実行することができませんが、考え方はこのanswerに基づいて日付範囲を生成することです。

  1. 派生テーブルdとしてこの日付範囲を使用します。

  2. あなたがデータと一致しないためのデータとnullを一致させるためのすべての列を取得しますので、あなたの条件を追加するdleft joinattendanceを行います。

  3. 従業員ID以外の残りのデータが表示されます。私はあなたが選択クエリでハードコードすることをお勧めします。

    select * from 
        (select a.Date 
         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 '2017-01-06' AND '2017-01-10' 
        ) d 
    left join 
        attendance a 
    on d.date = a.date 
    where 
    a.user_id=10 
    
+0

で実現しました。これは動作しません。私が見つけたが、誰も私のために働いた解決策はありません。 –

+0

これはなぜ機能しませんか?何かエラーが出ますか? sqlfiddle.comを使用してサンプル・テーブルを作成すると、クエリを実行しようとすると簡単になります。 – Utsav

+0

私はsqlfiddle - http://sqlfiddle.com/#!9/3f3278で自分のスキーマを作成しました –

関連する問題