JOIN 列取决于日期范围

Posted

技术标签:

【中文标题】JOIN 列取决于日期范围【英文标题】:JOIN column depending on date range 【发布时间】:2017-03-08 16:11:56 【问题描述】:

我有两张桌子。第一个 (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 实现这一点?

【问题讨论】:

第一列是干什么用的? @Strawberry 只是某种行号,实际上并没有出现在表格中 摆脱它。这没有帮助。 @Strawberry 完成了。 借用SqlZim的rextest...rextester.com/KAGOV11673 【参考方案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 演示:http://rextester.com/KAGOV11673

【讨论】:

@ottlngr 乐于助人!

以上是关于JOIN 列取决于日期范围的主要内容,如果未能解决你的问题,请参考以下文章

大日期范围内的最小/最大日期值取决于值

Oracle Join 表与第一个表中的日期范围和第二个表中的日期

处理跨时期的日期范围

范围连接 data.frames - R 中具有日期范围/间隔的特定日期列

如何计算窗口内的平均值,其中窗口的范围取决于列的值?

根据日期范围过滤列