JOIN列取决于日期范围

时间:2017-03-08 16:11:56

标签: mysql sql

我有两张桌子。第一个(LOG)表示一个日志文件,其中包含IDtimestamp和其他任意列:

  id           timestamp
   1 2016-01-11 15:14:33
   2 2016-01-12 15:14:33
   3 2016-01-13 15:14:33
   4 2016-01-14 15:14:33
   5 2016-01-15 15:14:33
   6 2016-01-16 15:14:33
   7 2016-01-17 15:14:33
   8 2016-01-18 15:14:33
   9 2016-01-19 15:14:33
  10 2016-01-20 15:14:33

第二个表格(STATUS)存储状态和相应的日期,此状态为“有效”状态:

       date status
 2016-01-02      A
 2016-01-13      B
 2016-01-18      C

状态A始于2016-01-02,有效期至2016-01-13,依此类推。

我想将这些表连接到表中以实现如下表:

  id           timestamp  status
   1 2016-01-11 15:14:33       A
   2 2016-01-12 15:14:33       A
   3 2016-01-13 15:14:33       B
   4 2016-01-14 15:14:33       B
   5 2016-01-15 15:14:33       B
   6 2016-01-16 15:14:33       B
   7 2016-01-17 15:14:33       B
   8 2016-01-18 15:14:33       C
   9 2016-01-19 15:14:33       C
  10 2016-01-20 15:14:33       C

如何使用MySQL实现这一目标?

1 个答案:

答案 0 :(得分:1)

您可以使用子查询来获取最新的status,如下所示:

select t.* , (
    select s.`status` 
    from s 
    where s.`date` < t.`timestamp` 
    order by s.`date` desc 
    limit 1
    ) as `status`
from t;

rextester演示:functionally the same.