欠落している日付に利用可能な最後の値を入力する必要があるため、最初のステップで、日次テーブルで欠落している日付を含むすべての日付でクエリを取得します。欠落している日付を埋めることについて多くの質問があることは知っていますが、ここではそのクエリに where 句が必要です。通常、すべての日付を含む別のテーブルを作成し、他のテーブルとの左結合を使用してすべての日付を取得することをお勧めします。欠落している値については、NULL を取得しますが、これは問題ありません。
だから私はそのテーブルを作成し、それをカレンダーと呼び、このクエリを試しました:
SELECT d.`date`, s.`item`, s.state
FROM calendar d LEFT JOIN daily_states s
ON d.`date` = s.`date`
WHERE s.`item` = 'item1'
ORDER BY s.`date` ASC;
結果が得られることを願っています(example1):
Date | Item | State
2013-05-01 item1 state1
2013-05-02 item1 state1
2013-05-03 NULL NULL
2013-05-04 item1 state3
2013-05-05 NULL NULL
2013-05-06 item1 state3
2013-05-07 item1 state1
item の NULL 値のみが実際には item1 であると確信していますが、右側のテーブルに日付がありません。そうすれば、後で欠落しているアイテムと状態の値を以前の状態で埋めて、この結果で終了できます(example2):
2013-05-01 item1 state1
2013-05-02 item1 state1
2013-05-03 item1 state1
2013-05-04 item1 state3
2013-05-05 item1 state3
2013-05-06 item1 state3
2013-05-07 item1 state1
しかし、WHERE句のために、私はこれ(結果)を取得します:
2013-05-01 item1 state1
2013-05-02 item1 state1
2013-05-04 item1 state3
2013-05-06 item1 state3
2013-05-07 item1 state1
だから私はまだ欠落している日付を持っていません。example1のように結果を得るには? ところで、私は例でSQLfiddleを作りました。事前にthx!