mysql在特定日期获取状态

时间:2012-04-19 02:42:22

标签: mysql

如何从表格中获取最接近某个日期的日期?如果在2月27日插入日志,状态将在一段时间内保持不变,并且不会添加其他记录。我怎么能在3月8日告诉哪个州? 我有两个表:状态和历史

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日时,我需要历史记录中的所有行。谢谢

3 个答案:

答案 0 :(得分:0)

要获取给定日期之前的最后一个状态(这将给出您在给定日期的状态),请使用此查询:

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

您可以根据需要添加到where子句,以查找具有某些特定条件的最新行

答案 1 :(得分: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'

答案 2 :(得分: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

你得到一个,但是最接近的日期......

<强> EDIT2: 要检索到给定日期的最后一个最近日期,那就是IS ACTIVE ...

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

你得到一个,但是最接近的日期......