JOIN 列取决于日期范围
Posted
技术标签:
【中文标题】JOIN 列取决于日期范围【英文标题】:JOIN column depending on date range 【发布时间】:2017-03-08 16:11:56 【问题描述】:我有两张桌子。第一个 (LOG
) 代表一个带有ID
、timestamp
和任意其他列的日志文件:
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 表与第一个表中的日期范围和第二个表中的日期