0

ある日付に最も近い日付を持つテーブルから行を取得するにはどうすればよいですか? 2 月 27 日にログを挿入すると、状態はしばらく同じままで、他のレコードは追加されません。たとえば、3 月 8 日がどの州であったかをどのように判断できますか? State と History の 2 つのテーブルがあります。

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

データベースに入れられたときのレコードのタイムラインを描画すると...

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

ですから、この間ずっとアクティブでした。状態がアクティブで、日付が 2010 年 3 月 8 日のときの履歴のすべての行が必要です。ありがとうございます。

4

3 に答える 3

0

これはうまくいくかもしれません

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

2 つのテーブルの単純な結合...

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

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

あなたは正確に1つを取得しますが、最も近い日付...

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

あなたは正確に1つを取得しますが、最も近い日付...

于 2012-04-19T05:19:21.007 に答える
0

特定の日付より前の最後の状態を取得するには (これにより、特定の日付の状態が得られます)、次のクエリを使用します。

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

特定の条件で最新の行を見つけたい場合は、where 句に追加できます。

于 2012-04-19T05:15:53.410 に答える
0

単純なクエリ。あなたが言及した 2010 年 3 月 8 日の日付を考慮します。

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 句を次のように言い換えることができます。

where h.date = '2010-03-08' and s.name = 'active'
于 2012-04-19T05:16:10.843 に答える