【问题标题】:JOIN column depending on date rangeJOIN 列取决于日期范围
【发布时间】: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

标签: mysql sql


【解决方案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 乐于助人!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-11-04
  • 2023-01-31
  • 1970-01-01
  • 2010-11-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多