2012-04-19 16 views
0

日付に近い日付のテーブルから行を取得するにはどうすればよいですか? 2月27日にログを挿入すると、状態は同じ時間のまま変わらず、他のレコードは追加されません。例えば、3月8日にどの州があったかをどのようにして知ることができますか?データベースに入れたとき...mysqlは特定の日付に状態を取得します

2009-08-06         2010-08-06 
---|--------------------------------------------|----------------> 
'active'          'broken' 

だから、それはこの全体の時間アクティブであったときに私は、レコードのタイムラインを描く場合州立歴史

State:   History: 

id|name  id| date |id_state 
1 |works  1 |2010-08-06 |1 
2 |broken  2 |2011-05-10 |1 
3 |active  3 |2009-27-01 |2 

: は、私は2つのテーブルを持っています。ありがとうございました

+1

"ログテーブル" DDL、サンプルデータ、および予期した結果の少なくともスケッチ版を投稿できますか?それはあまりにも多くを推測せずにあなたの質問に答えるのを助けるだろう –

+0

あなたは結合についてはありませんか? –

答えて

0

特定の日付の前に最後の状態を取得するには、次のクエリを使用します。

select * from (
    select * 
    from log_table 
    where `date` < $1 
    and name = 'active' 
    order by `date` desc) x 
limit 1 

あなたには、いくつかの特定の条件と最新の行を見つけることが好きなようにあなたは、WHERE句に追加することができます。

+0

私は最後のものを探していませんが、特定の日付にアクティブだったものを探しています – Ales

+0

次に 'and name = 'active''を内部where節に追加してください。それを試してください - – Bohemian

+0

も動作するはずですが、このクエリはあなたが望むものを正確に与えることを認識しましたか? ITはその日付の前の最後のレコードを返します。 – Bohemian

0

単純なクエリ。

select h.id, h.date,h.id_state from history h 
left outer join State s on s.id = h.id_state 
where 
h.date = '2010-03-08' and s.id = 3 

あなたの必要に応じて、次のように言い換えることができます。

where h.date = '2010-03-08' and s.name = 'active' 
0

これは動作する可能性があり2つのテーブルの結合シンプル

SELECT state.id, history.id, name, date 
FROM state 
JOIN history ON state.id = history.id_state 
WHERE date = '2010-08-06' 

...

編集: が指定した日付に最後に最も近い日付を取得するには、これを使用します...

SELECT state.id, history.id, name, date 
FROM state 
JOIN history ON state.id = history.id_state 
WHERE date <= '2012-04-10' 
ORDER by date DESC 
LIMIT 1 

NEが、最も近い日付...

EDIT2:指定された日付に最後に最も近い日付を取得するには 、それがアクティブになって...

SELECT state.id, history.id, name, date 
FROM state 
JOIN history ON state.id = history.id_state 
WHERE date <= '2012-04-10' AND name = 'active' 
ORDER by date DESC 
LIMIT 1 

あなたは正確にONEを得るが、最も近いです日付...

+0

問題は、3月8日はテーブルに保存されていませんが、3月6日はその日に状態が「アクティブ」に変更され、残っているためですその日以降も有効です。 – Ales

+0

したがって、指定した日付に最も近い日付を取得する必要がありますか? – Andreyco

+0

はい。アクティブな最も近いsmaler – Ales