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