【问题标题】:mysql get state on particular datemysql获取特定日期的状态
【发布时间】:2012-04-19 16:18:04
【问题描述】:

如何从表中获取日期最接近某个日期的行?如果在 2 月 27 日插入日志,状态会保持一段时间,不会添加其他记录。例如,我如何判断 3 月 8 日是哪个州? 我有两张表:State 和 History

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

【问题讨论】:

  • 能否请您至少发布一个粗略版本的“日志表”DDL、一些示例数据和预期结果?这将有助于回答您的问题而无需猜测太多
  • 你没有加入吗?

标签: mysql


【解决方案1】:

简单查询。考虑到您提到的 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】:

    这可能有效

    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
    

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

    编辑2: 要检索与给定日期最接近的日期,即 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
    

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

    【讨论】:

    • 问题是 3 月 8 日未存储在表中,但 3 月 6 日是例如,因为那天状态已更改为“活动”,并且即使在该日期之后仍保持活动状态。
    • 那么您需要检索最接近给定日期的日期吗?
    • 是的。活动的最近的较小的
    • 第一次编辑为您提供最后一个已知状态和日期的行。第二个给你最后知道的活动状态的行。
    • 限制 1 是这里的问题 :) 不幸的是我需要所有符合条件的行
    【解决方案3】:

    要获取给定日期之前的最后一个状态(这将为您提供给定日期的状态),请使用以下查询:

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

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

    【讨论】:

    • 我不是在寻找最后一个,而是在特定日期活跃的那个
    • 然后只需将 and name = 'active' 添加到内部 where 子句中。试试看 - 它应该可以工作
    • 另外,您是否意识到此查询提供了您想要的内容? IT 为您提供给定日期之前的最后一条记录,即该日期的活动记录
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-24
    • 2018-08-21
    • 1970-01-01
    相关资源
    最近更新 更多