0

如何从表中获取日期最接近某个日期的行?如果在 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 日时,我需要历史记录中的所有行。谢谢

4

3 回答 3

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 回答
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: 要检索与给定日期最接近的日期,即是活动的...

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

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

于 2012-04-19T05:19:21.007 回答